Javascript递归函数在这两种情况下的执行方式不同
问题是当您以0开始测试时,在输入ifJavascript递归函数在这两种情况下的执行方式不同,javascript,function,recursion,Javascript,Function,Recursion,问题是当您以0开始测试时,在输入ifconsole.log(“HI!”)之后它正在运行的事实 但是当您使用3开始测试时,console.log(“HI!”)它退出循环而不运行它 有什么区别?无论哪种方式,它都会进入if,但在一种情况下,它会在if之后继续读取代码,而在另一种情况下,它不会在if之后读取代码 我认为这是javascript中的一个bug。 有人能解释这两者的区别吗 function test(numb){ if(numb == 3) { return console.l
console.log(“HI!”)之后代码>它正在运行的事实
但是当您使用3开始测试时,console.log(“HI!”)代码>它退出循环而不运行它
有什么区别?无论哪种方式,它都会进入if,但在一种情况下,它会在if之后继续读取代码,而在另一种情况下,它不会在if之后读取代码
我认为这是javascript中的一个bug。
有人能解释这两者的区别吗
function test(numb){
if(numb == 3) {
return console.log("Finish!");
} else {
test(numb = numb + 1);
};
return console.log("HI!");
};
test(0)
我不确定我是否理解正确,但是当测试函数使用参数3运行时,它不应该返回console.log(“HI!”)代码>因为您放置了返回console.log(“Finish!”)代码>返回将返回值并停止函数我重新组织了代码
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时
- 第3行:打印“完成!”
- 第4行:返回。我们退出函数
(2) 当numb=0时,输出为:
"Finish!"
3
2
1
首先,我们调用test(0),test(0)将被推到内存堆栈上,在第6行中,test(1)将被调用,test(1)也将被推到堆栈上,其中局部变量numb变为1,……最后,将调用test(3),执行第3行和第4行,“Finish!”将被打印,然后我们将返回test(2),仍在堆栈上,将打印3个。然后我们返回测试(1)…最后,我们返回测试(0),其中1将被打印。首先介绍问题,然后发布相关代码。因为第一个分支有“return”,而另一个分支没有。返回退出函数。为什么返回console.log()
(始终是未定义的)的返回值?在JavaScript中,使用“==”而不是“==”当您使用3作为参数调用它时,为什么它会打印“HI!”?执行开始,计算分支,numb==3为真,因此它调用console.log
,并返回与代码指定完全相同的结果。故事结束了。这有什么奇怪的?你是对的,当我以3开头时,无论如何它都不会返回`console.log(“HI!”);'。但当我以0开头时,它返回“console.log(“HI!”);”。为什么我会得到不同的结果,尽管条件是以任何方式满足的?因为在其他条件下,你不返回任何东西,你只需调用相同的函数,然后将完成该函数,如果你像这个返回测试(numb=numb+1)一样放置返回;该函数将停止并运行console.log(“HI!”);永远不会出现