解释ES6 Rest paramter中实际发生的事情

时间:2017-09-06 17:59:46

标签: javascript ecmascript-6

请解释下面的例子。我无法理解这里发生的事情。提前谢谢你

 function f (x, y, ...a) {
        return (x + y) * a.length
    }
    f(1, 2, "hello", true, 7) === 9

3 个答案:

答案 0 :(得分:2)

Rest获取参数的“rest”并将其放入分配给a的数组中。

您的退货声明变为(1+2) * 3,等于9。

一个更简单的例子:

[x, y, ...a] = [1, 2, 3, 4, 5, 6]

console.log(x)
// 1
console.log(y)
// 2
console.log(a)
// [ 3, 4, 5, 6 ]

答案 1 :(得分:0)

如果您认为参数作为简单数组传递,那么以下

function f(a,b,...c){...}

可以转换为:

function f(args){
  var a = args[0],
      b = args[1],
      c = args.slice(2);
 //...
}

答案 2 :(得分:0)

  //function is getting defined here.
  function f (x, y, ...a) {
        return (x + y) * a.length
    }

   //function is getting called here.
  f(1, 2, "hello", true, 7) === 9

当你的函数f被调用时,在函数f中,你的代码需要x as 1, y as 2,而a作为包含["hello", true, 7]的数组。所以,array a has length 3

您的功能结果为(1 + 2) * 3,即9

因此,将函数结果与9进行比较是正确的。