Я только что обнаружил, что объект 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. Для строгие функции режима, значения свойств объектов аргументов являются просто копией аргументов, переданных функции, и существует нет динамической связи между значениями свойств и формальным значения параметров.