2011-12-20 81 views
2

我在node.js中運行這個。爲什麼以下代碼段會丟失cb var的作用域?爲什麼這個javascript函數失去閉包範圍?

Client.prototype.post = function(path, data, callback) { 
    var self = this; 
    var cb = callback; 
    return function() { 
    console.log(path); 
    console.log(cb); 
    rest.post(self.baseUrl + path, data).on('complete', cb || this.callback); 
    } 
}; 

這個函數的調用看起來像這樣client.post('/user', {}, function() {});和輸出以下:

/user 
undefined 

我期待第二行是[Function]可能正在使用或者JS的.call()或執行時,返回功能.apply()方法來改變它運行在範圍之內。不過,我倒覺得cb將訪問就像path是。

更新:結束語回調函數中也可以正常工作。但是我仍然想解釋一下這裏發生的事情。

var cb = function() { callback(); }; 
+2

'call' /'apply'更改上下文,而不是範圍。你說的事情不應該發生,你能鏈接到實際的代碼? – david 2011-12-20 20:01:42

+1

工作對我來說:http://jsfiddle.net/Squeegy/Uf9nD/你的問題可能出在其它地方... – 2011-12-20 20:03:25

+0

https://gist.github.com/1503056線33-41。該文件用作使用vowsjs – 2011-12-20 20:09:52

回答

2

它按預期工作。問題是錯的,所有的評論都是對的。有人需要學習如何編寫代碼。