[英]How does this callback function example work?
(请各位程序员理解,我退伍后重新学习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()
都不会重复吗?
请注意,您正在从 add 函数返回一个函数。
当这个块运行时:
var add_history = add(20, 20, function(result) {
console.log('addition result : ' + result);
});
回调被执行, addition result : 40
记录到控制台,并且add_history
成为对您在add
函数中定义的history
函数的引用。
现在,当您调用add_history
您正在调用与回调无关的history
函数的引用。 但是由于history
是在add
范围内创建的,因此您可以访问在该范围内定义的count
变量。
您可以通过在add
函数中定义history
函数来调用回调,如下所示:
var history = function() {
callback(result)
count += 1;
return count + ' : ' + a + ' + ' + b + ' = ' + result;
}
这将导致每次调用add_history
时运行回调。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.