两种情况下Javascript递归函数的执行方式均不同

时间:2020-11-11 11:17:42

标签: javascript function recursion

问题在于,当您输入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)

2 个答案:

答案 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时,

  • 第3行:打印“完成!”
  • 第4行:返回。我们退出该功能。

(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。