我有这样的事情:
function recurse(a){
for(i = a; i < 3; i++){
alert(i);
if(i == 0){
recurse(++a);
}
}
}
recurse(0);
我期望的输出是0(调用新函数)1,2(结束第二个函数调用),然后用1和2完成函数的第一次运行。 但相反,它只会警告0,1和2一次并完成。
答案 0 :(得分:2)
i
是全球性的
尝试var i
,您可能会得到您期望的行为。
function recurse(a){
for(var i = a; i < 3; i++){
alert(i);
if(i == 0){
recurse(++a);
}
}
}
recurse(0);
输出:0, 1, 2, 1, 2
第一个1, 2
来自更深层次的递归。
根据最初的说法,您从顶层获得0
,从更深层次获得1,2
,然后在顶层获得其他内容(因为i < 3
不再满足)。