我试图了解延期的工作原理,因此在所有这些中都使用了延期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);
});
},
通过setTimeout
thancallback();
或循环调用函数之间的区别是什么callback.call();
这样做的原因是让javascript线程有机会触发队列中可能正在等待的任何其他事件。
Javascript是单线程的。如果触发了事件,则该事件只能在当前运行的代码完成后才能运行。
使用setTimeout
零时延有效地告诉JS解释器该callback
函数调用是新上下文的一部分,并且当前代码块已完成。这意味着JS将在调用callback()
检查是否需要处理其他事件之前抓住机会。
尽管这可能会延迟callback()
立即被调用,但这对于您的网站的整体性能可能会有所帮助:
其他可能需要处理的事件包括点击事件和其他UI触发器。如果您不给他们执行的机会,则可能会使您的用户界面显得呆滞或无响应。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句