首頁 >web前端 >js教程 >ECMAScript6函數剩餘參數(Rest Parameters)_javascript技巧

ECMAScript6函數剩餘參數(Rest Parameters)_javascript技巧

WBOY
WBOY原創
2016-05-16 15:55:361554瀏覽

我們知道JS函數內部有arguments對象,可以拿到全部實參。現在ES6為我們帶來了一個新的對象,可以拿到除開始參數外的參數,即剩餘參數(廢話好多 O(∩_∩)O~)。

這個新的物件和arguments不一樣,它是程式設計師自訂的普通標識符,只是需要在前面加上三個點:...

function func(a, ...rest) {
 console.log(a)
 console.log(rest)
}
func(1)
func(1, 2, 3, 4)

注意func的第二個參數rest,前面有三個點。定義好後調用了兩次,結果分別如下

可以看到第一次呼叫時,rest為一個空數組,第二次為[2, 3, 4]。

又例如,在前面定義2個參數

function func(a, b, ...rest) {
 console.log(a, b)
 console.log(rest)
}
func(1, 2)
func(1, 2, 3, 4)

輸出結果如下

透過以上兩個範例應該已經了解剩餘參數的意義了吧。

剩餘參數嘛,所以後面就不要再跟其它的參數了,不然會報錯

function func(a, ...rest, b) {
 
}

這裡在rest後面加了一個參數b,Firefox會報錯

當您使用剩餘參數後,函數的length屬性會發生一些變化

function func(a, b, ...rest) {
}
func.length // 2

即length不包含rest,為2。

有同學會想,剩餘參數前面是否可以一個參數都沒有呢? 答案是肯定的

function func(...rest) {
 console.log(rest)
}
func(1) // [1]
func(1, 2, 3, 4) // [1,2,3,4]

這裡的rest實際和arguments功能差不多,有同學想這不就取代了arguments嗎? ECMAScript就是這個打算,在被廢棄的ES4裡就已經有Rest Parameters(熟悉AS3的同學應該了解),ES4被廢棄後,Rest Parameters被保留到了ES6。

請注意,rest不能跟arguments一起使用,會報錯

function func(...rest) {
 console.log(rest)
 console.log(arguments)
}

Firefox控制台如下

arguments和剩餘參數的差別

arguments是一個偽數組(Array-like)
剩餘參數是一個真正數組(Array),具有Array.prototype上的所有方法
arguments上有callee,callee有caller

function func(a, ...rest) {
  console.log(rest instanceof Array)
}
func(1, 2) // true

最後我們以一個剩餘參數實際應用作為結束

/*
 * 任意个数相加
 *
 * **示例**
 * sum(1)
 * sum(1, 2)
 * sum(1, 2, 3)
 */
function sum(first, ...rest) {
  var result = first
  var i = 0
  var len = rest.length
  while (i < len) {
    result += rest[i]
    i++
  }
  return result
}

以上所述就是本文的全部內容了,希望大家能喜歡。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn