为什么setTimeout会立即触发?

The*_*err -5 javascript

我在W3学校找到了这个 setTimeout()方法示例,并发现了一些我无法解释的内容.例子是:

myVar = setTimeout(alertFunc, 3000);
Run Code Online (Sandbox Code Playgroud)

......工作正常.但是当我改变它

myVar = setTimeout(alertFunc(), 3000);
Run Code Online (Sandbox Code Playgroud)

......警报立即触发.为什么?不应该是一样的吗?

T.J*_*der 6

不应该是一样的吗?

一点都不.

setTimeout(alertFunc, 3000)alertFunc(对函数的引用)的值传递给setTimeout.setTimeout存储功能参考,以便在三秒后调用它.

setTimeout(alertFunc(), 3000) alertFunc立即调用,并将其返回值传递给setTimeout.正是这种方式foo(bar()) 调用 bar并将其返回值传递给foo.

  • @evolutionxbox http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts (2认同)