为什么这个javascript函数会丢失闭包范围?

为什么这个javascript函数会丢失闭包范围?,javascript,node.js,scope,closures,Javascript,Node.js,Scope,Closures,我正在node.js中运行这个。为什么以下代码段失去了cbvar的作用域 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('compl

我正在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()
方法执行,以更改它运行的范围。但我认为,
cb
可以像
path
一样访问

更新:将回调包装在函数中使其工作。但我还是想解释一下这里发生了什么

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

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

调用
/
应用
更改上下文,而不是范围。你所说的正在发生的事情不应该发生,你能链接到实际的代码吗?对我有用:你的问题可能在别处。。。第33-41行。该文件用作使用VowsJST的测试套件的一部分。问题不在这里,问题在于如何调用post函数。代码在哪里?我无法重现这个问题。请更新以制作具有代表性的样品。注意,您不需要
cb
;因为
回调
在范围内,所以它将被闭包捕获。