function abc(num){
if(num>3){
abc(--num);
}
console.log(num)
}
abc(5)
先公佈答案吧,輸出結果是3,3,4
剛開始我也很詫異,後面終於想明白了,我把個人一些思路分享出來;
這道題主要考了你們對遞歸的理解,遞歸實際上是有去有回的,進去了還要一步一步出來,最終完成遞歸,
咋們來分析下
第一步,當咱們調用abc(5),建立了第一個abc的執行上下文,進入判斷(num>3)條件成立,
第二步,調用了abc(--num),建立第二個abc的執行上下文,這時候num=4,進入(num>3)條件成立,
第三步,調用abc(--num),建立第三個abc的執行上下文,這時候num=3,進入(num>3)條件不成立,直接執行下一行代碼輸出num的值爲3,代碼結束,銷燬這個上下文,注意了這個時候遞完成了,就要歸了,
回到第二步abc的上下文,此時的num已經執行了--num,因此等於3,那麼執行輸出語句固然是3了,代碼執行完畢,銷燬第二個abc上下文;
回到第一步abc的上下文,此時同理--num的緣由,num=4,輸出結果爲4,代碼執行完畢,銷燬上下文.
遞歸函數到這裏就算執行完了;