为什么在延迟中使用setTimeout

Moe*_*ini 7 javascript deferred

我试图理解延迟是如何工作的,所以在他们所有人都使用setTimeout.

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

这个问题的一个例子就是使用setTimeout

resolve: function (data) {
    this.promise.okCallbacks.forEach(function(callback) {
      window.setTimeout(function () {
        callback(data)
      }, 0);
    });
  },
Run Code Online (Sandbox Code Playgroud)

调用循环中的函数setTimeoutcallback();或之间有什么不同callback.call();

Spu*_*ley 12

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

Javascript是单线程的.如果触发了某个事件,则只能在当前运行的代码完成时运行.

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

虽然这可能会使callback()自己无法立即调用,但这对您网站的整体性能有利:

可能需要处理的其他事件包括单击事件和其他UI触发器.如果您没有给他们执行的机会,可能会使您的用户界面显得迟缓或无响应.