When do I use parenthesis and when do I not?
我怎么能说:
1 2 3 4 | var myFunction = function() { setTimeout(myFunction, 1000); } myFunction(); |
为什么
函数调用需要括号(即使函数不带参数)。
Nutshell:
深入挖掘:有些情况下
1 2 3 4 5 | var myFunction = function() { return function() { alert("ohai"); }; }; |
-
匿名函数(包含单个
return 语句)立即执行。 -
该函数的返回值本身就是一个包含
alert 的函数。
所以:
-
myFunction 单独是对函数的引用(恰好返回函数)。 -
myFunction() 将执行。它评估为适用于setTimeout() 的函数引用。
最后:
1 | setTimeout(myFunction(), 1000); |
这会在一秒内调用
另请参见为什么函数语句需要名称?
*或者要评估的字符串,但首选参考。
setTimeout的目的是在经过一段时间后运行代码。你需要将函数传递给它(因此setTimeout本身可以在适当的时候调用函数),因为如果在将函数传递给setTimeout之前调用函数(带括号),它将立即执行,而不是在1秒后执行。
当你使用括号时,它会说'现在调用这个函数'。因此,如果您说
在第2行中,函数
我想这个例子会让我更清楚,如果我可以,
1 2 3 4 5 | function callback() { console.log('this function runs on page loads.'); } setTimeout(callback(), 2000); |
这里
1 2 3 4 5 | function callback() { console.log('this function runs after page loads.'); } setTimeout(callback, 2000); |
这里