這是一個初學者的問題,但我無法理解這背后的邏輯:
function power(base, exponent) {
if (exponent == 0) {
return 1;
} else {
return base * power(base, exponent -1);
}
}
當運行控制臺日志時,我們得到 console.log(power(2, 3)); -> 8
我的問題是:這是運行回傳線(指數不是 0),但是(在同一條線上),我們如何將基數(在該示例中為數字 2)乘以尚未定義的冪函式. 從技術上講,它會是這樣的,對吧?2 * power(2, 3 - 1) 但是如果尚未定義功率...(功率)部分會做什么?
謝謝!
uj5u.com熱心網友回復:
對于遞回,您需要了解“范圍”的概念。每次您power()在函式內進行新呼叫時,您都會在函式開頭輸入一個新范圍。當這個新函式能夠完成執行并回傳其值時,它將回傳到函式中的原始行(本例中的第 5 行)。因此,在本例中,使用power(2, 3)呼叫堆疊呼叫將如下所示
從上到下,當我們從函式外部的原始范圍(范圍 1)向下層下降到新范圍時
scope 1: power(2, 3)
scope 2: return 2 * power(2, 2)
scope 3: return 2 * power(2, 1)
scope 4: return 2 * power(2, 0)
scope 5: return 1
然后,一旦我們實際上從底部范圍獲得了回傳值 1,范圍就可以開始決議,并且值從底部范圍“冒泡”,回到頂部給我們最終的答案。
scope 1 (final answer): 8
scope 2: 2 * 4
scope 3: 2 * 2
scope 4: 2 * 1
scope 5: 1
直到我們最終只剩下范圍 1,我們的最終答案是 8。希望這是有道理的。如果您實際使用除錯器并逐步執行程式,您可以實時看到這種情況。
uj5u.com熱心網友回復:
檢查是否定義了變數,以及它是什么值(是否是數字、字串、物件、函式等)在運行時完成。
當你運行這個函式時,它是在函式定義之后。在函式呼叫內部,它會尋找一個被呼叫的變數power(它在運行時存在;它也必須存在才能呼叫它),這是一個函式,所以它呼叫該函式是因為(base, exponent -1).
這適用于我所知道的每種具有功能的編程語言。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/508635.html
標籤:javascript
