JavaScript. Подробное руководство, 6-е издание, стр. 91
8.3.2. Списки аргументов переменной длины: объект Arguments
Если число аргументов в вызове функции превышает число имен параметров, функция лишается возможности напрямую обращаться к неименованным значениям. Решение этой проблемы предоставляет объект
<b>Arguments</b><b>arguments</b><b>Arguments</b><b>Arguments</b>Предположим, что была определена функция f, которая требует один аргумент, х. Если вызвать эту функцию с двумя аргументами, то первый будет доступен внутри функции по имени параметра х или как
<b>arguments[0].</b><b>arguments[1].</b><b>arguments</b><b>length</b><b>length</b>Объект
<b>Arguments</b><b>function f(x, у, z)</b><b>{</b><b> // Сначала проверяется, правильное ли количество аргументов передано </b><b> if (arguments.length != 3) {</b><b> throw new Error("функция f вызвана c ” + arguments.length +</b><b> "аргументами, а требуется 3.");</b><b> }</b><b> // А теперь сам код функции...</b><b>}</b>Обратите внимание, что зачастую нет необходимости проверять количество аргументов, как в данном примере. Поведение по умолчанию интерпретатора JavaScript отлично подходит для большинства случаев: отсутствующие аргументы замещаются значением
<b>undefined</b>Объект
<b>Arguments</b><b>function max(/*...*/)</b><b>{</b><b> var m = Number.NEGATIVE.INFINITY;</b><b> // Цикл по всем аргументам, поиск и сохранение наибольшего из них</b><b> for(var і = 0; і < arguments.length; i++)</b><b> if (arguments[i] > max) max = arguments[i];</b><b> // Вернуть наибольшее значение return max;</b><b>}</b><b>var largest = max(1, 10, 100, 2, 3, 1000, 4, 5, 10000, 6); // => 10000</b>Функции, подобные этой и способные принимать произвольное число аргументов, называются функциями с переменным числом аргументов (ivariadic functions, variable arity functions или varargs functions). Этот термин возник вместе с появлением языка программирования С.
Обратите внимание, что функции с переменным числом аргументов не должны допускать возможность вызова с пустым списком аргументов. Будет вполне разумным использовать объект
<b>arguments[]</b>Не следует забывать, что
<b>arguments</b><b>Arguments</b><b>Arguments</b><b>length</b>У объекта
<b>Arguments</b><b>Arguments</b><b>arguments[]</b><b>arguments[]</b><b>arguments[]</b><b>function f(x) {</b><b> console.log(x); // Выведет начальное значение аргумента </b><b> arguments[0] = null; // При изменении элемента массива изменяется х! </b><b> console.log(x); // Теперь выведет "null"</b><b>}</b>Определенно, это не совсем то поведение, которое можно было бы ожидать от настоящего массива. В этом случае
<b>arguments[0]</b>Эта особенность в поведении объекта
<b>Arguments</b><b>arguments</b><b>arguments</b><b>arguments.</b>