[英]How exactly works the setTimeout() JavaScript method?
我不太喜欢JavaScript,并且以下与setTimeout()方法有关的疑问。
因此,我有一个测试脚本:
function simpleMessage() {
alert("This is just an alert box");
}
// settimeout is in milliseconds:
setTimeout(simpleMessage, 5000);
因此,当我执行页面时,在5秒钟后执行了simpleMessage()函数,并显示警报弹出窗口。
我了解当我这样做时:
setTimeout(simpleMessage, 5000);
这意味着必须在计时器设置后的5秒后执行simpleMessage()函数,但是为什么要使用simpleMessage而不是simpleMessage()进行函数调用?
simpleMessage
是对函数的引用 ,而simpleMessage()
执行该函数。 setTimeout
需要一个函数引用来稍后调用。
为了使事情变得更加明显,您可以将函数声明编写为
// define my function (but don't execute it)
var myFunction = function() {
alert('SOUND THE ALARMS!');
};
// start a timer that will execute the given function after the given
// period of time
setTimeout(myFunction, 5000);
请参阅setTimeout
文档 。
setTimeout
的第一个参数是要执行的函数。 标识符simpleMessage
指向要让setTimeout
执行的函数,因此这就是您作为setTimeout
的参数提供的。
如果您做了setTimeout(simpleMessage(), 5000);
,您将立即执行simpleMessage
,然后setTimeout
将获得返回值作为其第一个参数。 这相当于:
var value = simpleMessage();
setTimeout(value, 5000);
这没有道理; 它与setTimeout(simpleMessage(), 5000);
。
还考虑一个返回函数的高阶函数:
function funcFacotry() {
return function() { alert("this is just an alert box."); }
}
var simpleMessage = funcFactory();
setTimeout(simpleMessage, 5000);
在这种情况下,这实际上有一定道理,因为返回值funcFactory
实际上是一个函数本身。
因为您需要传递要在5s之后调用的函数的setTimeout的引用。
这个:
setTimeout(simpleMessage(), 5000);
会在您调用setTimeout函数的同时执行simpleMessage函数。
javascript中的setTimeout
在设置为第二个参数的特定时间后执行该函数,而如果与setInterval
使用,它将间隔执行,而无需考虑该函数是否执行(例如,如果您正在使用动画)。
作为第二个问题,如果您使用带括号的函数,则这是方法调用,而不带括号的使用是对特定方法的引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.