1

代码 A,这没关系并记录[ 1, 2, 3 ]

function fn() {
    console.log(...arguments);
}

fn([1, 2, 3]);

代码 B,这也失败了SyntaxError: Unexpected token ... ,换行...arguments()无济于事。

function fn() {
    var a = ...arguments;
}

fn([1, 2, 3]);

我假设在这两种情况下,我们都有一个RHS查找。为什么可以传递...argumentsconsole.log(或其他函数),但不能将其分配给变量?

PS。我知道这永远不会出现在现实生活中的代码中,或者还有其他更好的解决方案。我的问题纯粹是理论/概念性的,仅限于理解为什么会发生不同的行为。

4

2 回答 2

3

扩展语法的两个应用是:

  1. 将可迭代值的项转换为函数调用的参数
  2. 将可迭代的项目转换为数组的元素

所以这有效:

function fn() {
    var a = [...arguments];
}
于 2016-06-30T11:21:00.867 回答
2

它不像在 CODE B 中那样工作...无效的语法

您可以在 fn 参数中传播,例如

function fn(...params) 
{
  ...
}

ArrayObject

var a = [1,2,3,4,5],
b = [6,...a];

var x = {a:1,b:1},
y = {c:1,...x}
于 2016-06-30T11:20:13.920 回答