exports.list = function(callback){
var result = model.find({}, function(err, objects){
callback(null, objects)
});
return result;
}
问:为什么上面的代码是封闭的?是因为函数参数调用嵌套在其中的函数callback
吗?
Q :这是否会导致无限循环,因为函数通过其参数调用自身?
问:如果callback
未在任何地方定义,上述功能是否有效?
答案 0 :(得分: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()
回调在技术上仍然会被“定义”,但它的值不是函数。
答案 1 :(得分:0)
它是一个闭包,因为callback
是在封闭了分配给exports.list
的函数作用域的model.find()代码中捕获的。
答案 2 :(得分:0)
问:为什么上面的代码是封闭的?是因为函数参数调用嵌套在其中的函数回调吗?
答:正如Mike解释的那样,一旦在函数内使用了外部var,就会创建一个闭包。
问:这会导致无限循环
答:我认为function(err, objects)
只会为模型触发一次,所以不会。如果你拨打callee
(或自我)
问:如果没有在任何地方定义回调,上述功能会起作用吗?
A:您将收到错误ReferenceError: callback is not defined