2011-12-20 54 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

它按预期工作。问题是错的,所有的评论都是对的。有人需要学习如何编写代码。