Ответ 1
Собственно, в строгом режиме это не происходит, как которое вы можете увидеть здесь.
Если вы прочитали раздел 10.6 стандарта ECMA, в частности Примечание 1, вы увидите:
Для функций нестрого режима индекс массива (определенный в 15.4) назвал свойства данных объекта аргументов числовые значения которых меньше числа формальных параметров соответствующего функционального объекта делиться своими значениями с соответствующими привязками аргументов в контексте выполнения функции. Это означает, что изменение свойство изменяет соответствующее значение привязки аргумента и наоборот. Это соответствие нарушается, если такое свойство удаляется, а затем переопределяется или изменяется свойство в свойство accessor. Для строгого режима функции, значения свойств объекта arguments являются просто копией аргументов, переданных функции, и динамическая связь между значениями свойств и формальными значениями параметров отсутствует.
Короче говоря, это говорит о том, что в нестрогом режиме названные функциональные параметры работают как псевдонимы для элементов в объекте arguments
. Таким образом, изменение значения именованного параметра изменит значение эквивалентного элемента arguments
и наоборот. Это не ошибка. Это ожидаемое поведение.
Как редакционная статья, вероятно, не стоит полагаться на это поведение, так как это может привести к очень запутанному коду. Кроме того, такой код, если он выполняется в строгом режиме, больше не будет работать.