我有一个非常奇怪的问题,我不知道它是如何发生的。
当我用arguments[0] = 42
. 在arguments[0]
和第一个参数a
都是42
。这是预期的。
function foo(a, b, c) {
arguments[0] = 42;
console.log(a, arguments[0]);
}
foo(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用具有默认值的参数的函数时,第一个值a
不再被重新分配。有人可以解释这种差异吗?
function foo(a, b, c = 3) {
arguments[0] = 42;
console.log(a, arguments[0]);
}
foo(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
规范中有一条关于此的注释-arguments
当您在函数声明中不使用 ES6+ 语法(或在严格模式下)时,您只会获得一个映射对象(重点是我的):
注意:映射参数对象仅提供给没有剩余参数、任何参数默认 值初始值设定项或任何解构参数的非严格函数
当您使用默认参数时,您的参数对象不会被映射,就像在严格模式下一样:
function foo(a, b, c) {
"use strict";
arguments[0] = 42;
console.log(a, arguments[0]);
}
foo(1, 2, 3); // 1 42
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
73 次 |
最近记录: |