如果我将函数体而不是函数名传递给setTimeout会发生什么?

时间:2014-03-04 21:03:26

标签: javascript node.js settimeout

我知道使用setTimeout的正确方法如下:

setTimeout(function(){alert('hi!');}, 3000);

或在外部定义函数,并传递引用:

var foo=function(){alert('hi!');}
setTimeout(foo, 3000);

如果我把它写成:

会发生什么
setTimeout(alert('hi!'), 3000);

看起来alert('hi!')已正确执行。

2 个答案:

答案 0 :(得分:8)

alert("hi")立即执行 ,其结果undefined传递给setTimeout ...

现在,如果您只是想在指定参数时避免使用包装器,请尝试以下操作:

 setTimeout(alert, 3000, "hi!");

答案 1 :(得分:0)

在前两个示例中,函数将在定义的延迟后作为回调函数在setTimeout函数内调用,而第三个示例将立即执行。