为啥这个javascript函数失去了闭包范围?
Posted
技术标签:
【中文标题】为啥这个javascript函数失去了闭包范围?【英文标题】:Why is this javascript function losing closure scope?为什么这个javascript函数失去了闭包范围? 【发布时间】: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
在范围内,它将被闭包捕获。
【参考方案1】:
它按预期工作。问题是错误的,所有的 cmets 都是正确的。有人需要学习如何编码。
【讨论】:
以上是关于为啥这个javascript函数失去了闭包范围?的主要内容,如果未能解决你的问题,请参考以下文章