[英]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.