zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Microsoft Office 2007 Compatibility Pack
    BizTalk Server Memo, Part 2
    Database Engine Tuning Adviser: How to tune your new SQL Server 2005
    SSB FAQ (2) – Create a stored procedure as a service program
    TFS Change TFS server's service account
    SSB FAQ (1) – Target Queue cannot receive message
    SSB FAQ (3) – A rowset provider OPENXML
    GridView / RowCommand / e.CommandArgument
    Distinguished Fields vs. Promoted Properties in Biztalk
    Using a SQL Adapter in BizTalk Server 2004
  • 原文地址:https://www.cnblogs.com/1571523732-qq/p/10039455.html
Copyright © 2011-2022 走看看