ECMAScriptES6函数剩余参数(Rest Parameters)

咱俩了解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,后边有八个点。定义好后调用了三遍,结果个别如下

ECMAScript 1

能够观望第两次调用时,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)

输出结果如下

ECMAScript 2

 

透过以上七个示范应该早就明白剩余参数的意义了吗。

 

剩余参数嘛,所在此以前边就不要再跟任何的参数了,不然会报错

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

}

此地在rest后边加了一个参数b,Firefox会报错

ECMAScript 3

 

当您使用剩余参数后,函数的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控制台如下

ECMAScript 4

 

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
}

  

相关:

http://www.cnblogs.com/snandy/archive/2011/03/21/1989743.html