为什么要在延迟中使用setTimeout

莫因·侯赛尼(Moein Hosseini)

我试图了解延期的工作原理,因此在所有这些中都使用了延期setTimeout

this.callbacks;// array of functions reference
this.callbacks.forEach(function(callback){
    window.setTimeout(function(){
          callback(data);
    },0);
});

来自一个实例这个问题在使用setTimeout

resolve: function (data) {
    this.promise.okCallbacks.forEach(function(callback) {
      window.setTimeout(function () {
        callback(data)
      }, 0);
    });
  },

通过setTimeoutthancallback();循环调用函数之间的区别是什么callback.call();

斯普德利

这样做的原因是让javascript线程有机会触发队列中可能正在等待的任何其他事件。

Javascript是单线程的。如果触发了事件,则该事件只能在当前运行的代码完成后才能运行。

使用setTimeout零时延有效地告诉JS解释器该callback函数调用是新上下文的一部分,并且当前代码块已完成。这意味着JS将在调用callback()检查是否需要处理其他事件之前抓住机会

尽管这可能会延迟callback()立即被调用,但这对于您的网站的整体性能可能会有所帮助:

其他可能需要处理的事件包括点击事件和其他UI触发器。如果您不给他们执行的机会,则可能会使您的用户界面显得呆滞或无响应。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章