考虑以下示例:
<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>
是什么导致它执行 IMMEDIATELY ,而不是等待3秒设置,以及仅执行警报 ONCE < / em> ,而不是按预定的5秒间隔?
感谢您提供的任何帮助!
梅森
答案 0 :(得分:16)
alertBox()
这看起来不像是一个即时函数调用吗?
尝试传递函数(不执行它):
setInterval(alertBox, 5000);
答案 1 :(得分:11)
因为您正在执行该函数,而不是传递函数对象。
function myFunction(){
setTimeout(doSomething, 3000); // no () on the function
};
答案 2 :(得分:0)
以下代码执行不同,
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中,因此无需执行事件循环。
更多参考: WebAPI:https://developer.mozilla.org/en-US/docs/Web/API/Console_API Javascript运行时和事件循环:https://cybrohosting.com/knowledgebase/17/How-JavaScript-works-in-browser-and-node.html