Объект `arguments` изменяется при изменении параметров

Я только что обнаружил, что объект arguments действительно изменяется, если изменяется один из параметров.

Например:

function some(a, b, c ){
  console.log(arguments);


  args = [ a, b, c ];
  a = new Date();

  console.log(arguments);
  console.log(args);
}

some(1,2,3 );

Вы увидите, что в то время как args остается тем же (ожидаемое поведение), arguments действительно изменяется.

Вопросы:

  • Это что-то, что хорошо документировано? Если да, то где?

  • Есть ли что-то еще, что нужно быть осторожным в отношении объекта arguments?

Ответ 1

Это указано в стандарте ECMA sec-10.6:

Для функций нестрого режима [...] количество формальных параметров изначально соответствующий объект функции делится своими значениями с соответствующие привязки аргументов при выполнении функций контекст. Это означает, что изменение свойства изменяет соответствующее значение привязки аргумента и наоборот. Эта соответствие нарушается, если такое свойство удаляется, а затем переопределено или если свойство изменено на свойство accessor. Для строгие функции режима, значения свойств объектов аргументов являются просто копией аргументов, переданных функции, и существует нет динамической связи между значениями свойств и формальным значения параметров.