【发布时间】:2012-01-24 18:03:47
【问题描述】:
我在 node.js 中运行它。为什么以下代码段失去了cb var 的范围?
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() 方法执行以更改它运行的范围。但我认为 @987654331 @ 可以像 path 一样访问。
更新:将回调包装在一个函数中使其工作。但我仍然想解释一下这里发生的事情。
var cb = function() { callback(); };
【问题讨论】:
-
call/apply更改上下文,而不是范围。你说的是不应该发生的事情,你能链接到实际的代码吗? -
为我工作:jsfiddle.net/Squeegy/Uf9nD 您的问题可能出在其他地方...
-
gist.github.com/1503056 第 33-41 行。该文件用作使用 vowsjs 的测试套件的一部分
-
这不是问题所在,问题在于您如何调用 post 函数。那个代码在哪里?
-
我无法重现该问题。请更新minimal test case 以制作具有代表性的样本。注意你不需要
cb;由于callback在范围内,它将被闭包捕获。
标签: javascript node.js scope closures