我想包装我的头,为什么下面的代码导致堆栈溢出时,括号中包括,但不要当他们省略。为什么在传递函数作为参数时必须省略括号?
我打电话给函数本身作为setTimeout的一个参数,它工作时没有parantheses,但是当我添加它们的时候失败了。在函数后面添加()是我的直觉。只希望有人能为我解决这个问题。什么时候可以选择而不是?
案例1:
var a = 1;
function foo() {
a++;
document.write(a);
setTimeout(foo(), 2000)
}
// RangeError: Maximum call stack size exceeded
案例2:
var a = 1;
function foo() {
a++;
document.write(a);
setTimeout(foo, 2000)
}
// parens are omitted on foo function and it works.
可能是dup。这应该有所帮助:http://stackoverflow.com/questions/5520155/settimeout-callback-argument/5520190#5520190 – 2012-07-09 21:25:58
非常感谢你lwburk,你在该链接的解释清除了我的东西。 – 2012-07-09 21:44:32