簡體   English   中英

你能為我解釋一下這個 JavaScript function 嗎?

[英]Can you explain this JavaScript function for me?

 function countup(n) {
  if (n < 1) {
    return [];
  } else {
    const countArray = countup(n - 1);
    countArray.push(n);
    return countArray;
  }
}
console.log(countup(5)); // [ 1, 2, 3, 4, 5 ]

你們能否向我解釋一下這個 function 是如何工作的,以及變量“countArray”何時會將元素推送到數組中。

它是一個遞歸 function ,它將從1n的所有數字放入一個數組中。 讓我們看一下n = 5的示例:

你輸入 function 並檢查n是否小於1 ,因為不是這種情況,你跳到 else 語句,其中數組countArray用 countup countup(n - 1)的值初始化,因此你從頭開始function,但n = 4

這會發生多次,直到n0 ,在這種情況下,第一個 if 語句為真。 通過此退出條件,function 返回一個空數組,該數組被分配給前一個遞歸“層”中 function 調用中的變量countArray 之后,將該“層”上等於1的變量n推入數組中。 最后這些步驟也會發生多次,因為countArray返回到遞歸 function 的下一次調用,與返回空數組的方式相同。

在執行所有遞歸 function 調用后,返回結果數組[1,2,3,4,5]

這個 function 將首先檢查變量n < 1

如果它更大,它將以n-1自行運行

If n is 0 , the function will return an empty Array and will go one "layer" back to the last function countup countup(1) It will now add n (1) to the countArray and return this Array to the "last" function Now function countup countup(2)已在其countArray中收到數字1 ,它將返回此數字。 [1, 2]

它將重復此過程,直到達到“最后一個”/“第一個” function ( countup countup(5) ) 並將返回包含所有數字[1, 2, 3, 4, 5]countArray

要理解遞歸,有時您需要手動跟蹤代碼的執行。 現在下面的行導致遞歸調用並從數字中減一,然后將其傳遞給遞歸調用。

const countArray = countup(n - 1);

現在想象一下,如果您將 5 傳遞給最初的 function 調用,如下所示:

countup(5);

由於 5 不小於 1, else塊將被執行。 else 塊中的第一行是遞歸調用。 因此,當您的程序遇到遞歸調用時,它會停止當前 function 的執行,直到該遞歸 function 調用結束/返回。 所以第一個遞歸調用將是:

const countArray = countup(4);

因此,將重復相同的過程,直到n等於0 由於 0 小於 1,if 條件將評估為true 它將返回一個empty array

遞歸調用后,將數字推送到遞歸調用返回的數組中。 所以該點的數組將包含[0]然后[0, 1]並且它將繼續添加數字,直到計算出所有遞歸調用,然后它將執行初始 function 調用的 rest。

很多時候,遞歸可以被循環代替,但情況並非總是如此。 作為一名程序員,應該意識到這個重要的話題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM