簡體   English   中英

這個回調函數示例是如何工作的?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM