ES6學習--函數剩余參數 (rest參數)


ES6 引入 rest 參數(形式為“...變量名”),用於獲取函數的多余參數,這樣就不需要使用arguments對象了。rest 參數搭配的變量是一個數組,該變量將多余的參數放入數組中。(可以拿到除開始參數外的參數)

這個rest 參數和arguments不一樣,它是程序員自定義的一個普通標識符,只是需要在前面加上三個點:...

 

function func(a, ...rest) {

  console.log(a)
  console.log(rest)
}
func(1) // 1 []
func(1, 2, 3, 4) //1 [2,3,4]
 
又比如,在前面定義2個參數
 
function func(a, b, ...rest) {
  console.log(a, b)
  console.log(rest)
}
func(1, 2) // 1 2 []
func(1, 2, 3, 4) 1 2 [3,4]
 
注意:剩余參數后面不能跟其他參數,否則會報錯
 
function  func(a, ...rest, b) {
 
}//報錯
 

當使用剩余參數后,函數的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一起使用,會報錯
function func(...rest) {
  console.log(rest)
  console.log(arguments)
}
 
 
那么rest和arguments的區別是什么呢?
  • arguments是一個偽數組(Array-like)
  • 剩余參數是一個真正數組(Array),具有Array.prototype上的所有方法
  • arguments上有callee,callee上有caller

如:

function func(a, ...rest) {

    console.log(rest instanceof Array)
}
func(1, 2) // true
 
 
rest 實際應用
 
 //求和函數
function add(...values) { let sum = 0; for (var val of values) { sum += val; } return sum; } add(2, 5, 3) // 10 

上面的代碼相當於以下代碼

function sum(first, ...rest) {
    var result = first
    var i = 0
    var len = rest.length
    while (i < len) {
        result += rest[i]
        i++
    }
    return result
}
 
sum(1, 2, 3)  //6


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM