如果console.log(... arguments)正常,为什么var a = ...参数会失败?

时间:2016-06-30 11:12:11

标签: javascript operators spread-syntax

代码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查找。为什么可以将...arguments传递给console.log(或其他函数),但不能将其分配给变量?

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

2 个答案:

答案 0 :(得分:3)

传播语法的两个应用是:

  1. 将可迭代值的项转换为函数调用的参数
  2. 将iterable的项目转换为数组元素
  3. 这样可行:

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

答案 1 :(得分: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}