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

Yan*_*Liu 2 javascript settimeout node.js

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

setTimeout(function(){alert('hi!');}, 3000);
Run Code Online (Sandbox Code Playgroud)

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

var foo=function(){alert('hi!');}
setTimeout(foo, 3000);
Run Code Online (Sandbox Code Playgroud)

如果我把它写成:

setTimeout(alert('hi!'), 3000);
Run Code Online (Sandbox Code Playgroud)

它看起来像是alert('hi!')正确执行的.

I a*_*ica 8

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

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

 setTimeout(alert, 3000, "hi!");
Run Code Online (Sandbox Code Playgroud)