[英]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.