为什么在传递代码时(由''包围)如此:
setTimeout('alert("James Blunt is bad")', 5000);
在显示我们所知道的内容以及传递函数引用之前是否有5秒的暂停:
setTimeout(alert("James Blunt is bad"), 5000);
没有停顿?
答案 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);