这个回调函数示例如何工作?

时间:2019-08-05 10:48:24

标签: javascript node.js closures

(我想从其他程序员的理解中得知,我出兵后我正在重新研究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()

1 个答案:

答案 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时运行。