问题在于,当您输入console.log ("HI!");
是否为运行事实后,以0开始测试。
但是当您从3开始测试时,console.log("HI!");
会退出循环而不运行它。
有什么区别?不管哪种方式,它都会进入if,但一种方式是在if之后继续读取代码,另一种方式则是在if之后继续读取代码。
我认为这是javascript中的错误。 谁能解释其中的区别?
function test(numb){
if(numb == 3) {
return console.log("Finish!");
} else {
test(numb = numb + 1);
};
return console.log("HI!");
};
test(0)
答案 0 :(得分:0)
我不确定我是否正确理解,但是当测试函数使用参数3运行时,它不应返回console.log("HI!");
,因为您将return console.log("Finish!");
放在 return 返回值并停止功能
答案 1 :(得分:0)
我重新组织了代码。
function test(numb){
if(numb === 3) {
console.log("Finish!"); // line 3
return; // line 4
}
test(++numb); // line 6
console.log("HI! " + numb); // line 7
};
(1)当numb = 3时,
(2)当numb = 0时,输出为:
"Finish!"
3
2
1
首先,我们调用test(0),将test(0)压入内存堆栈,在第6行中,将调用test(1),还将test(1)压入堆栈,本地变量numb变为1,...最后,将调用test(3),执行第3行和第4行,“完成!”将被打印,然后返回到仍在堆栈中的test(2),并打印3。然后我们返回到test(1)...最后,我们返回到test(0),其中将打印1。