繁体   English   中英

setTimeout()JavaScript方法到底如何工作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM