繁体   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