为什么重新分配参数不适用于具有默认值的参数?

我有一个非常奇怪的问题,我不知道它是如何发生的。

当我用arguments[0] = 42. 在arguments[0]和第一个参数a都是42。这是预期的。

function foo(a, b, c) {
  arguments[0] = 42;
  console.log(a, arguments[0]);
}

foo(1, 2, 3);

回答

规范中有一条关于此的注释-arguments当您在函数声明中不使用 ES6+ 语法(或在严格模式下)时,您只会获得一个映射对象(重点是我的):

注意:映射参数对象仅提供给没有剩余参数、任何参数默认
值初始值设定项或任何解构参数的非严格函数

当您使用默认参数时,您的参数对象不会被映射,就像在严格模式下一样:

function foo(a, b, c) {
  "use strict";
  arguments[0] = 42;
  console.log(a, arguments[0]);
}

foo(1, 2, 3); // 1 42


以上是为什么重新分配参数不适用于具有默认值的参数?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>