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

Javascript setTimeout在传递代码时等待,但在传递引用时不等待,javascript,settimeout,Javascript,Settimeout,为什么这样传递代码(由“”包围)时: setTimeout('alert("James Blunt is bad")', 5000); 在显示我们都知道的内容和传递函数引用之前,是否有5秒钟的停顿: setTimeout('alert("James Blunt is bad")', 5000); setTimeout(alert("James Blunt is bad"), 5000); 没有停顿 如果是第二个示例,您没有传递函数 您正在调用警报并传递其返回值(警报的返回值不是函数) 函数

为什么这样传递代码(由“”包围)时:

setTimeout('alert("James Blunt is bad")', 5000);
在显示我们都知道的内容和传递函数引用之前,是否有5秒钟的停顿:

setTimeout('alert("James Blunt is bad")', 5000);
setTimeout(alert("James Blunt is bad"), 5000);
没有停顿


如果是第二个示例,您没有传递函数

您正在调用
警报
并传递其返回值
警报
的返回值不是函数)

函数引用不会以
(…)

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

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

如果是第二个示例,那么您没有传递函数

您正在调用
警报
并传递其返回值
警报
的返回值不是函数)

函数引用不会以
(…)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

你也打败我了,回答得好。我要补充的唯一一件事可能是这个参考-。他们也很好地解释了这一点。DOH,现在你说得很明显。+1用于添加“并且警报的返回值不是函数”。大多数人都忽略了这一点,但这是理解结果为何出乎意料的重要部分。你也打败了我,回答得好。我要补充的唯一一件事可能是这个参考-。他们也很好地解释了这一点。DOH,现在你说得很明显。+1用于添加“并且警报的返回值不是函数”。大多数人忽略了这一点,但这是理解结果为何出乎意料的一个重要部分,