为什么这个javascript函数会失去封闭范围?

时间:2011-12-20 19:56:12

标签: javascript node.js scope closures

我在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(); };

1 个答案:

答案 0 :(得分:2)

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