该运算符有两种对立的语义,在不同的上下文中有不同的含义。

Spread

该运算符将可迭代对象(数组、字符串),展开为一个个单独的元素或者函数的参数。

  1. var arr = [1, 2, 3, 4];
  2. function foo(a, b, c, d){
  3. console.log(a, b, c, d); //1 2 3 4
  4. }
  5. foo(...arr);
  6. //老方法,使用apply间接通过数组传参
  7. foo.apply(null, arr);

:::info 展开只有一层深度。 :::

Rest parameters

给函数最后一个形参加上…,使得最后一个形参会变成数组。实参传值时会将剩余的参数都收集到数组中。

function foo(a, ...args){
  console.log(args);    //[2, 3, 4]
}
foo(1,2,3,4);

:::info 函数只能定义一个rest参数,而且必须放在参数列表的最后一个。 :::