如果 console.log(...arguments) 正常,为什么 var a = ...arguments 会失败?
Why does var a = ...arguments fail, if console.log(...arguments) is OK?
代码 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。我知道这永远不会出现在现实生活中的代码中,或者还有其他更好的解决方案。我的问题纯粹是 theoretical/conceptual,仅限于理解为什么会出现不同的行为。
它不像代码 B 那样工作...语法无效
你可以像这样在 fn 参数中传播
function fn(...params)
{
...
}
或Array
和Object
var a = [1,2,3,4,5],
b = [6,...a];
var x = {a:1,b:1},
y = {c:1,...x}
传播语法的两个应用是:
- 将可迭代值的项转换为函数调用的参数
- 将可迭代项转换为数组元素
所以这有效:
function fn() {
var a = [...arguments];
}
代码 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。我知道这永远不会出现在现实生活中的代码中,或者还有其他更好的解决方案。我的问题纯粹是 theoretical/conceptual,仅限于理解为什么会出现不同的行为。
它不像代码 B 那样工作...语法无效
你可以像这样在 fn 参数中传播
function fn(...params)
{
...
}
或Array
和Object
var a = [1,2,3,4,5],
b = [6,...a];
var x = {a:1,b:1},
y = {c:1,...x}
传播语法的两个应用是:
- 将可迭代值的项转换为函数调用的参数
- 将可迭代项转换为数组元素
所以这有效:
function fn() {
var a = [...arguments];
}