JavaScript setTimeout() 不会等待执行

JavaScript setTimeout() won't wait to Execute?

本文关键字:等待 执行 setTimeout JavaScript      更新时间:2023-09-26

请考虑以下示例:

<script type="text/javascript">
    function alertBox(){
        alert('Hello World!');
    }
    function doSomething(){
        setInterval(alertBox(), 5000); //This is for generic purposes only
    };
    function myFunction(){
        setTimeout(doSomething(),3000);
    };
    myFunction();
</script>

是什么原因导致它立即执行,而不是等待设置的 3 秒,以及只执行一次警报,而不是按计划的 5 秒间隔执行?

感谢您提供的任何帮助!

石匠

alertBox()

这看起来不像是立即调用函数吗?

尝试传递函数(不执行它):

setInterval(alertBox, 5000);

这是因为您正在执行函数,而不是传递函数对象。

function myFunction(){
    setTimeout(doSomething, 3000); // no () on the function
};

以下代码以不同的方式执行,

setTimeout(console.log('Nuwan'),0)---(A); and 
setTimeout(function(){console.log('Nuwan'),0}) --- (B)

原因是当(B)正在执行时,javascript运行时中的CallStack将setTimeout()推送到Web API和WebAPI 等待 0 秒将回调函数推送到事件队列,然后在当前堆栈为空后,EventLoop 将回调推送到堆栈。

在案例 (A) 中,console.log() 直接调用,因为它在 WepAPI 中,无需执行事件循环。

更多参考:网络接口:https://developer.mozilla.org/en-US/docs/Web/API/Console_APIJavascript 运行时和事件循环:https://cybrohosting.com/knowledgebase/17/How-JavaScript-works-in-browser-and-node.html