setTimeout在传递代码时等待,但在传递引用时不等待

时间:2012-01-19 17:49:23

标签: javascript settimeout

为什么在传递代码时(由''包围)如此:

setTimeout('alert("James Blunt is bad")', 5000);

在显示我们所知道的内容以及传递函数引用之前是否有5秒的暂停:

setTimeout(alert("James Blunt is bad"), 5000);

没有停顿?

http://jsfiddle.net/eBcpc/

3 个答案:

答案 0 :(得分:3)

如果你的第二个例子,你没有传递函数。

致电 alert并传递返回值alert的返回值不是函数)。

函数引用不以(…)

结尾
setTimeout(function () { alert("Hello, world"); }, 5000);

或者,在浏览器支持较弱的情况下,将参数传递给数组中的alert作为setTimeout的第三个参数。:

setTimeout(alert, 5000, ["Hello, world"]);

答案 1 :(得分:1)

使用代码参数调用setTimeout时,必须将其包装在函数中:

setTimeout(function () { alert("James Blunt is bad"); }, 5000);

否则,当JavaScript执行setTimeout时,它将立即运行alert函数,希望alert将返回一个函数对象,然后该函数对象可以排入超时队列。 (显然,alert不会返回函数。)

答案 2 :(得分:1)

在第二个示例中,您正在调用alert函数,然后调用setTimeout。这是因为在调用函数之前会处理函数的参数。 (如果alert有一个返回值,并且你想将该值作为参数传递给另一个函数,那么这正是你想要的行为。)

您要做的是将匿名函数传递给setTimeout,然后让匿名函数调用alert,如下所示:

setTimeout(function() {
        alert("James Blunt is bad");
    }, 5000);