var time = 0; var res = "";
var a = function () {
time++;
if (time < 5) {
res = a();
}else{
return 1;
}
console.log(res);
return "end"+time
};
a();
// 下面是执行结果
1
end5
end5
end5
"end5"
为什么先打印1呢
var time = 0; var res = "";
var a = function () {
time++;
if (time < 5) {
res = a();
}else{
return 1;
}
console.log(res);
return "end"+time
};
a();
// 下面是执行结果
1
end5
end5
end5
"end5"
为什么先打印1呢
var sum = time = 0;
var a = function () {
sum += time + 1;
time++;
if (time < 100) {
return a();
} else {
return 1;
}
}
var res = a();
自己打个debugger
(断点),然后一步步调式啊...
var time = 0; var res = "";
var a = function () {
time++;
debugger
if (time < 5) {
res = a();
debugger
}else{
debugger
return 1;
}
debugger
console.log(res);
return "end"+time
};
a();
打上四个debugger,然后在游览器里一步步按F9查看变量的值。其实这个返回值就很好理解了。
因为time
一直小于5,因此这段代码不断调用a(),当time
大于5,就进入else
条件状态分支了,然后retrun 1;
。
这时候res
等于1了,所以console.log(res)
打印出来的是1
,但此时time
已经是5
了,所以return "end"+time
返回的就是end5,但是我不知道为啥这里调用了三次...
time<5的时候,a一直递归调用自身,无法执行下一步,当time===5时,进入else,此时res被赋值为最内层a()的返回值1,然后,外层的a继续执行,此时time为5,输出end5, 再外层依次类推
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
你这是个递归函数,在time<5之前要递归调用4次a(),当time===5时,递归结束return 1;递归结束是从里往外进行返回,所以第一个打印出来的是1。而time是个全局变量,所以最后都是5。
你可以这样改一下看的更清楚: