簡體   English   中英

Array.prototype.splice - 幫助理解課程

[英]Array.prototype.splice - help to understand a lesson

這是教程中的一個函數:

function add() {
    var values = Array.prototype.splice.call(arguments, [1]),
        total = 0;

    for(var value of values) {
        total += value;
    }

    return total;
}

資源

表達式Array.prototype.splice.call(arguments, [1])讓我困惑。

  1. 為什么1
  2. 為什么用括號[1]

如果我們傳遞1,它表示splice() start位置,所以它將跳過我們傳遞給add()的第一個參數,因此它不會添加所有參數......

這是教程中的錯誤嗎?

是的,這個例子是錯的,如果你嘗試的代碼不起作用(它會忽略第一個參數),就像你說的那樣。 如果該行是:

var values = Array.prototype.slice.call(arguments),

要么

var values = Array.prototype.splice.call(arguments, 0),

我的猜測:這個例子是通過簡單地編寫另一個具有一個特殊參數的函數的代碼並在ES5語法中使用apply而不是call來實現的。

在本教程的另一部分中,討論了計算函數,其第一個參數確定了要執行的計算類型。 如果使用ES5語法編寫它們,則必須刪除第一個參數。 這解釋了為什么1 - 刪除第一個參數。 現在, 為什么括號 :JS中有兩個幾乎相同的函數: callapply 請參閱此關於apply

雖然這個函數的語法幾乎與call()的語法相同,但最根本的區別是call()接受一個參數列表,而apply()接受一個參數數組。

我認為計算函數的作者錯誤地使用了apply的語法,因此使用了括號。

你是對的,用[1]調用Array.prototype.splice可能是個錯誤。

根據MDN docs for splice ,這個方法的第一個參數應該是一個數字。 Chrome確實將[1]解釋為1並跳過第一個參數。

您應該檢查是否應該跳過第一個參數,否則最好直接在函數參數上進行for循環。

暫無
暫無

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

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