Действителен в строгих режимах EcmaScript 3 и EcmaScript 5, но недопустим в строгом режиме EcmaScript 5.Он работает во всех современных браузерах и самых старых.Он не должен работать в строгом режиме, например при запуске в Firefox 5 с директивой "use strict"
.
Из раздела Спецификация EcmaScript 5 10.6.11.c.ii
10.6 Аргументы Объект
...
Если для параметра false задано значение false, а имя не является элементом mappedNames, тогда
Добавитьname как элемент списка mappedNames.
Пусть g будет результатом вызова абстрактной операции MakeArgGetter с аргументами name и env.
Пусть p будет результатом вызова абстрактной операции MakeArgSetter с аргументами name и env.
Вызвать внутренний метод [[DefineOwnProperty]] карты, передавая ToString (indx), дескриптор свойства {[[Set]]: p, [[Get]]: g, [[Configurable]]: true} и false в качестве аргументов.
В основном, arguments
объект получает установщик для каждого индекса, так что присвоение arguments[i]
изменяет значение именованного параметра в позиции i
.В спецификации есть язык, который заставляет его работать наоборот.
Это должно работать в нестрогом режиме в любом интерпретаторе
(function (x) {
alert("x=" + x + ", arguments[0]=" + arguments[0]); // Both should be 0
arguments[0] = 1;
alert("x=" + x + ", arguments[0]=" + arguments[0]); // both should be 1
x = 2;
alert("x=" + x + ", arguments[0]=" + arguments[0]); // both should be 2
})(0);
Но если вы запустите вышеописанное в Firefox 5 сстрогое использование директивы вы получаете другое поведение:
(function (x) {
"use strict";
alert("x=" + x + ", arguments[0]=" + arguments[0]); // Both should be 0
arguments[0] = 1;
alert("x=" + x + ", arguments[0]=" + arguments[0]); // x=0, arguments[0]=1
x = 2;
alert("x=" + x + ", arguments[0]=" + arguments[0]); // x=2, arguments[0]=1
})(0);