setTimeout()JavaScript方法的工作原理

How exactly works the setTimeout() JavaScript method?

本文关键字:工作 方法 JavaScript setTimeout      更新时间:2023-09-26

我不太喜欢JavaScript,我对setTimeout()方法有以下疑问。

因此,我有一个测试脚本:

function simpleMessage() {
    alert("This is just an alert box");
}
// settimeout is in milliseconds:
setTimeout(simpleMessage, 5000);

因此,当我执行页面时,5秒钟后执行simpleMessage()功能,并显示警报弹出窗口。

我明白当我这样做时:

setTimeout(simpleMessage, 5000);

这意味着simpleMessage()函数必须在定时器设置后5秒后执行,但为什么在函数调用中使用simpleMessage而不是单纯形Message()?

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);

这没有道理;与CCD_ 12相同。

还考虑一个返回函数的高阶函数:

function funcFacotry() {
    return function() { alert("this is just an alert box."); }
}
var simpleMessage = funcFactory();
setTimeout(simpleMessage, 5000);

在这种情况下,这实际上是有意义的,因为funcFactory的返回值实际上是一个函数本身。

javascript中的

setTimeout在设置为第二个参数的特定时间后执行函数,而如果与setInterval一起使用,它将以一定的间隔执行,而不必考虑函数是否被执行(例如,如果用于动画,这将导致块度)。

第二个问题是:如果您使用带括号的函数,这是一个方法调用,而不带括号的使用是对特定方法的引用。

因为您需要在5s之后传递对要调用的函数的setTimeout的引用。

此:

setTimeout(simpleMessage(), 5000);

将在调用setTimeout函数的同时执行simpleMessage函数。