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

标签 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(或其他函数),但不能将其分配给变量?

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

最佳答案

传播语法的两个应用是:

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

所以这是可行的:

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

关于javascript - 如果 console.log(...arguments) 正常,为什么 var a = ...arguments 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38121443/

相关文章:

javascript - 我如何使用 Service Worker 向我的所有 API 请求添加 Authorization header ,这是否有意义?

c - C中模函数的深入工作

python - bytearray 的二进制反转值

javascript - 为什么在此代码中使用 “n--” 运算符会引发错误?

javascript - Firebase 上传功能每次的工作方式都不同

javascript - 带有不区分大小写标志 'i' 和全局的正则表达式 javascript 无法工作

javascript - 复制和更新数组中对象的属性

javascript - 如何使扩展运算符仅通过非函数属性进行枚举?

javascript - 如何将 JavaScript 类实例与对象合并?

javascript - 检查变量是否为 "async function"类型