JavaScript setTimeout() 不会等待执行?

IT技术 javascript callback settimeout setinterval
2021-01-22 16:20:16

考虑以下示例:

<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秒为单位设置,以及只执行警戒ONCE,而不是在计划每隔5秒?

感谢您的任何帮助,您可以提供!

石匠

3个回答
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 中,不需要去事件循环来执行。

更多参考: WebAPIs:https : //developer.mozilla.org/en-US/docs/Web/API/Console_API Javascript 运行时和事件循环:https : //cybrohosting.com/knowledgebase/17/How-JavaScript-works-在浏览器和 node.html