解釋一下這個JavaScript遞回,當0<0運算式對foo(3)進行評估時到底會發生什么?
function-foo 回傳 console.log("test")
是不是在回傳陳述句中傳遞的console.log()是不正常的?
是不是因為陣列的索引3和4有兩個0,因為foo演算了兩次0,因為一旦i-1達到1-1,遞回呼叫應該是foo(0)是嗎?
但是繼續,但是console.log被呼叫了兩次,其中foo()遞回呼叫被掛在兩次之間,這里的順序有什么區別?
我不明白為什么會出現這些結果
let ar = []。
function foo(i) {
if (i < 0)
return console.log("test")。
ar.push(i)。
console.log(i, Boolean(i<0)。
foo(i - 1)。
ar.push(i)。
console.log(i, Boolean(i<0) )。)
}
foo(3)
console.log('ar='/span>, JSON.stringify( ar )
.as-console-wrapper { max-height。100% ! important; top: 0 }
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
你的遞回代碼為foo(3)做:
function foo(i) {
if (i < 0) return // stop recursive call
ar.push(i) //第一次推送。
foo(i - 1) //遞回呼叫[/span
ar.push(i) //第二次推。
}
ar.push(3) // ar = [3] ==== firsts push
ar.push(2) //ar = [3,2]/span>
ar.push(1) // ar = [3,2,1]
ar.push(0) //ar = [3,2,1,0]
return // i == -1 , (i<0) is true => no pushS, no foo(i - 1)
ar.push(0) //ar = [3,2,1,0,0] === 秒推
ar.push(1) //ar = [3,2,1,0,0,1]/span>
ar.push(2) //ar = [3,2,1,0,0,1,2]
ar.push(3) //ar = [3,2,1,0,1,2,3]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/319322.html
標籤:
下一篇:列印結構中的所有節點
