Только оригинальные аргументы, которые существовали при вызове функции, были «сглажены» через объект arguments
, так что вы могли бы изменить объект аргументов и также автоматически влиять на именованный аргумент функции.
FYI, в строгом режиме, ни один из объектов на объекте arguments
не переименован в аргументы с именованной функцией. Но в нестрогом режиме аргументы, которые изначально существовали (и только те), сглажены обратно через объект arguments
.
Имейте в виду, что объект arguments не является реальным массивом. Это особый тип объекта, и это специальное поведение «сглаживания» существует только для свойств этого объекта, которые были первоначально размещены там, когда вызывалась функция, а не для свойств, которые вы могли добавить сами. Поскольку arguments[1]
изначально не существовал, у него нет этой специальной функции.
Смотреть это:
function foo(a, b) {
console.log(arguments.length); // 1
arguments[1] = 2;
console.log(arguments.length); // still 1
console.log(arguments[1]); // does show 2
console.log(b); // undefined, arguments[1] is not aliased to b
}
console.log(foo(1));
no Я не работаю в строгом режиме –