簡體   English   中英

js遞歸函數輸出問題,函數棧

[英]js recursion function output question, function stack

我對函數遞歸感到困惑

 function foo(i) { console.log("checking: " + i); if (i < 0) return; console.log('begin: ' + i); foo(i - 1); console.log('end: ' + i); } foo(1);

為什么是輸出:

checking: 1
begin: 1
checking: 0
begin: 0
checking: -1
end: 0
end: 1

它不應該打印 end: 0, end: 1,因為我們在 if 條件下返回。 怎么了?

return只終止最直接運行的函數。

foo(1)
  foo(0)
    foo(-1)

if (i < 0)
  return;

在第三次調用時完成,終止第三個函數

foo(1)
  foo(0)
    foo(-1) <-- this function stops running

但讓其他功能照常繼續:

foo(1)
  foo(0) (execution resumes here, just after the foo(1) line)

可以通過拋出錯誤來退出所有祖先函數(直到.catch ,如果有的話),但這種僅僅為了控制流的策略並不是一個好主意。

 function foo(i) { console.log("checking: " + i); if (i < 0) throw new Error(); console.log('begin: ' + i); foo(i - 1); console.log('end: ' + i); } foo(1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM