0
exports.list = function(callback){

  var result = model.find({}, function(err, objects){
    callback(null, objects)
  });
  return result;
}

:为什么上面的代码是闭包?是因为函数参数调用了callback嵌套在其中的函数吗?

:这是否会导致无限循环,因为函数通过其参数调用自身?

callback:如果没有在任何地方定义,上述函数会起作用吗?

4

3 回答 3

1

其他人已经回答了你的大部分问题。但是,从您的评论中,我看到您可能仍然对最后一个问题感到困惑:

  • 问:如果没有在任何地方定义回调,上述函数会起作用吗?

答:callback在上面的代码中已经定义了。这callback是定义的位置:

exports.list = function(callback){ // <---- the callback variable defined here

  var result = model.find({}, function(err, objects){
    callback(null, objects) // <-- callback is used here
  });
  return result;
}

现在,按照“定义”这个词的严格含义,回调被定义为eports.list(). 如果您传递除函数以外的任何内容(或什么都不传递),exports.list()则从技术上讲,回调仍然是“定义的”,但它的值不会是函数。

于 2012-11-02T21:32:10.137 回答
0

它是一个闭包,因为callback在 model.find() 代码中从分配给的封闭函数范围内捕获exports.list

于 2012-11-02T20:36:08.220 回答
0

问:为什么上面的代码是一个闭包?是不是因为函数参数调用了嵌套在里面的函数回调?

答:正如 Mike 所解释的,一旦在函数内部使用了外部变量,您就创建了一个闭包。

问:这会导致无限循环吗

答:我假设function(err, objects)模型只会触发一次,所以不会。如果您调用callee(或自己) ,您将创建一个无限循环

问:如果没有在任何地方定义回调,上述函数会起作用吗?

A:你会得到一个错误ReferenceError: callback is not defined

于 2012-11-02T21:18:33.577 回答