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(); };
'call' /'apply'更改上下文,而不是范围。你说的事情不应该发生,你能链接到实际的代码? – david 2011-12-20 20:01:42
工作对我来说:http://jsfiddle.net/Squeegy/Uf9nD/你的问题可能出在其它地方... – 2011-12-20 20:03:25
https://gist.github.com/1503056线33-41。该文件用作使用vowsjs – 2011-12-20 20:09:52