我试图弄清楚为什么在包含括号时以下代码会导致堆栈溢出,但在省略括号时却不会。
我将函数本身作为 setTimeout 的参数调用,它可以在没有括号的情况下工作,但是当我添加它们时当然会失败。我的直觉是在函数后面加上 ()。只是希望有人可以为我解决这个问题。什么时候参数是可选的而不是?
情况1:
var a = 1;
function foo() {
a++;
document.write(a);
setTimeout(foo(), 2000)
}
// RangeError: Maximum call stack size exceeded
案例二:
var a = 1;
function foo() {
a++;
document.write(a);
setTimeout(foo, 2000)
}
// parens are omitted on foo function and it works.