调用setTimeout的延迟为1的目的是什么?

Jak*_*kob 10 javascript settimeout

Google Drive API快速入门指南中,一旦加载了客户端库,就会调用以下函数:

// Called when the client library is loaded to start the auth flow.
function handleClientLoad() {
    window.setTimeout(checkAuth, 1);
}
Run Code Online (Sandbox Code Playgroud)

setTimeout以这样的延迟1呼叫而不是checkAuth立即呼叫的目的是什么?

Ben*_*aum 10

JavaScript有异步I/O(AJAX /请求),以及setTimeoutsetInterval,

运行setTimeout1毫秒(或0)的一种用法是告诉代码在其后的同步代码之后运行.这是一个例子

setTimeout(function(){
     alert("World");
},1); 
alert("Hello");

//alerts "Hello" then "World"
Run Code Online (Sandbox Code Playgroud)

我想保持我的答案简单而且到目前为止,如果你感兴趣,有关于setTimeout如何在MDN文章中有关它的更多细节


Fen*_*ton 7

通过使用,setTimeout您可以在checkAuth功能完成之前使页面成为交互式.

从本质上讲,您正在阻止阻止checkAuth页面.

另请注意,HTML5规范中指定的最小延迟为5ms,因此等待1ms实际上是等待5ms.如果您回收该时间非常重要,则可以通过使用延迟0ms来实现相同的结果window.postMessage.这最初设计用于处理跨源通信,但具有与设置超时0ms类似的效果(由于浏览器仅允许5ms - 或者在某些旧版浏览器中为10ms,因此无法执行此操作).

最后,时间不保证.JavaScript在单个线程上运行,因此当你将某些内容推送到一个计时器上时,它必须等待执行其余JavaScript的开放,然后再转向该线程 - 它不会并行运行.