Javascript : Will a function call all callbacks for all functions that ever called it?

标签 javascript callback

假设我们有一个函数。

function kevin(cb){
   //Ok  then, so async stuff here, then, when done, 
   cb(1); <== reply;
}

然后:

....
kevin(x=> console.log(x));

然后另一个 block 在上述调用收到回复之前调用 kevin()

kevin(y=> console.log(y));

在使用 Java 一段时间后,我有点困惑,在 java 中,如果这些回调是 Java 接口(interface),并且对 kevin 的第二次调用发生在第一次调用之前返回时,第二个调用将覆盖第一个,并且只返回第二个,需要 复合模式 确保在方法完成时记录并实现所有回调。

但在 Javascript 中,我没有收到任何错误,一切正常,所有调用 kevin() 的函数回调都被调用。

我在 Angular 中使用 typescript 来做这件事。所以以上其实都是类中的方法。

最佳答案

后续的函数调用将不会以任何方式替换之前的函数调用。如果在函数内等待某个异步事件,则会在事件循环上为每个等待安排一个新的回调。简单的例子:

setTimeout(() => console.log(1));
setTimeout(() => console.log(2));
setTimeout(() => console.log(3));

所有三个回调都将触发它们各自的值。

你唯一会受到干扰的情况是你有共享变量:

let foo = 'bar';

setTimeout(() => console.log(foo));
setTimeout(() => foo = 'baz', 500);
setTimeout(() => console.log(foo), 1000);

如果您没有意识到共享的 foo 正在另一个回调中被操纵,那么最后一个回调的结果可能是也可能不是您所期望的。

关于Javascript : Will a function call all callbacks for all functions that ever called it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50036441/

相关文章:

python - Tkinter 中的定时回调?

c++ - 如何使用c++类的方法作为回调函数

c++ - C 函数回调与 C++ 方法回调

启用 Ajax 的 WCF 仅间歇性返回回调函数

php - 如何忽略搜索引擎在 PHP 页面上的综合浏览量?

javascript - 如何在 ReactJS 的同一个类中调用方法?

javascript - JSON Stringify 因 UTC 而更改日期时间

javascript - 如何在 .vue 文件的 &lt;script&gt; 部分的父组件中处理通过 this.$emit 发出的自定义子事件?

javascript - 在页面加载时激活 jQuery img 和文本操作

callback - 如何实现 JavaScript 风格的回调?