(我想从其他程序员的理解中得知,我出兵后我正在重新研究nodeJS。我是初学者,问题也许太简单了,但是请帮助我理解下面的示例代码)
function add(a, b, callback) {
var result = a + b;
callback(result);
var count = 0;
var history = function() {
count += 1;
return count + ' : ' + a + ' + ' + b + ' = ' + result;
};
return history;
}
var add_history = add(20, 20, function(result) {
console.log('addition result : ' + result);
});
console.log('execute callback function: ' + add_history());
console.log('execute callback function: ' + add_history());
我希望结果如下:
addition result : 40
execute callback function: 1 : 20 + 20 = 40
addition result : 40
execute callback function: 2 : 20 + 20 = 40
但是结果显示:
addition result : 40
execute callback function: 1 : 20 + 20 = 40
execute callback function: 2 : 20 + 20 = 40
为什么从最后两个语句中每次调用console.log('addition result : ' + result);
都不会重复add_history()
?
答案 0 :(得分:1)
请注意,您要从add函数返回一个函数。
此块运行时:
var add_history = add(20, 20, function(result) {
console.log('addition result : ' + result);
});
执行回调,addition result : 40
登录到控制台,add_history
成为对您在{{ 1}}功能。
现在,当您调用history
时,您正在调用对add
函数的引用,该引用与回调无关。但是由于add_history
是在history
的范围内创建的,因此您可以访问在该范围内定义的history
变量。
您可以通过在add
函数内定义count
函数来调用回调,如下所示:
history
这将导致回调函数在您每次调用add
时运行。