3 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
return終止當(dāng)前函數(shù),并將控制流返回給調(diào)用者。
當(dāng)foo(3);被調(diào)用時(shí),函數(shù)用i參數(shù) 3初始化。它使if語句失敗,打印begin: 3,然后調(diào)用foo(3 - 1);。此時(shí),當(dāng)前函數(shù)(i參數(shù)為 3的函數(shù))將暫停,直到foo(3 - 1);調(diào)用完成。
foo(2);打印begin: 2,然后在調(diào)用時(shí)暫停foo(1)。
foo(1)打印begin: 1,然后在調(diào)用時(shí)暫停foo(0)。
foo(0)打印begin: 0,并返回:它終止,并將控制流返回給它的調(diào)用者,即 的函數(shù)調(diào)用foo(1)。
foo(1)恢復(fù),并繼續(xù)執(zhí)行,打印end: 1。這是函數(shù)塊的結(jié)尾,因此foo(1)函數(shù)調(diào)用結(jié)束,將控制流返回到foo(2)函數(shù)調(diào)用。
foo(2)恢復(fù),打印end: 2,然后終止,產(chǎn)生控制流回到foo(3)。然后foo(3)打印end: 3,并終止。
return僅終止當(dāng)前功能。終止所有調(diào)用函數(shù)(直到catch遇到 a)的唯一方法是拋出錯(cuò)誤:
function foo(i) {
if (i < 0)
throw new Error();
console.log('begin: ' + i);
foo(i - 1);
console.log('end: ' + i);
}
foo(3);

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
這應(yīng)該可以幫助您跟蹤代碼:
foo(3)
|-- "begin 3"
|-- foo(2)
| |-- "begin 2"
| |-- foo(1)
| | |-- "begin 1"
| | |-- foo(0)
| | | |-- "begin 0"
| | | |-- foo(-1) // returns nothing
| | | |-- "end 0"
| | |-- "end 1"
| |-- "end 2"
|-- "end 3"

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊
這是一個(gè)遞歸函數(shù)。當(dāng)基本條件填充時(shí),它執(zhí)行其他語句。在你的情況下它是 console.log('end: ' + i);
添加回答
舉報(bào)