Arguments

We use cookies. Read the Privacy and Cookie Policy

arguments[]

массив аргументов функции

Синтаксис

arguments

Описание

Массив arguments[] определен только внутри тела функции, где он ссылается на объект Arguments этой функции. Данный объект имеет нумерованные свойства и представляет собой массив, содержащий все переданные функции аргументы. Идентификатор arguments - это, по существу, локальная переменная, автоматически объявляемая и инициализируемая внутри каждой функции. Она ссылается на объект Arguments только внутри тела функции и не определена в глобальном программном коде.

См. также

Arguments; глава 8

Arguments

аргументы и другие свойства функции (Object->Arguments)

Синтаксис

arguments

arguments[n]

Элементы

Объект Arguments определен только внутри тела функции. Хотя формально он не является массивом, у него есть нумерованные свойства, действующие как элементы массива, и свойство length, значение которого равно количеству элементов массива. Его элементами являются значения, переданные функции в качестве аргументов. Элемент 0 - это первый аргумент, элемент 1 - второй аргумент и т. д. Все значения, переданные в качестве аргументов, становятся элементами массива в объекте Arguments независимо от того, присвоены ли этим аргументам имена в объявлении функции.

Свойства

callee -  Ссылка на выполняемую в данный момент функцию.

length -  Количество аргументов, переданных функции, и количество элементов массива в объекте Arguments.

Описание

Когда вызывается функция, для нее создается объект Arguments, и локальная переменная arguments автоматически инициализируется ссылкой на объект Arguments. Основное назначение объекта Arguments - предоставить возможность определить, сколькo аргументов передано функции, и обратиться к неименованным аргументам. В дополнение к элементам массива и свойству length, у объекта Arguments имеется свойство callee, которое позволяет неименованной функции ссылаться на саму себя.

Для большинства задач объект Arguments можно рассматривать как массив с дополнительным свойством callee. Однако он не является экземпляром объекта Array, а свойство Arguments.length не обладает особым поведением, как свойство Array.length, и не может использоваться для изменения размера массива.

При выполнении сценария в нестрогом режиме объект Arguments имеет одну очень необычную особенность. Когда у функции есть именованные аргументы, элементы массива в объекте Arguments являются синонимами локальных переменных, содержащих аргументы функции. Объект Arguments и имена аргументов предоставляют два различных способа обращения к одной и той же переменной. Изменение значения аргумента с помощью имени аргумента изменяет значение, извлекаемое через объект Arguments, а изменение значения аргумента через объект Arguments изменяет значение, извлекаемое по имени аргумента.

См. также

Function; глава 8

Arguments.callee

(не доступно в строгом режиме)

функция, выполняемая в данный момент

Синтаксис

arguments.callee

Описание

arguments.callee ссылается на функцию, выполняющуюся в данный момент. Данный синтаксис предоставляет неименованной функции возможность сослаться на себя. Это свойство определено только внутри тела функции.

Пример

// Неименованный литерал функции использует свойство callee

// для ссылки на себя, чтобы произвести рекурсивный вызов

var factorial = function(x) {

  if (x < 2) return 1; else return x * arguments.callee(x1);

}

var у = factorial(5); // Вернет 120

Arguments.length

число аргументов, переданных функции

Синтаксис

arguments.length

Описание

Свойство length объекта Arguments возвращает количество аргументов, переданных текущей функции. Это свойство определено только внутри тела функции.

Обратите внимание: это свойство возвращает фактическое количество переданных аргументов, а не ожидаемое. О количестве аргументов в объявлении функции говорится в справочной статье Function.length. Кроме того, следует отметить, что это свойство не обладает особым поведением, как свойство Array.length.

Пример

// Использовать объект Arguments, чтобы проверить, верное ли количество

// аргументов было передано

function check(args) {

  var actual = args.length; // Фактическое количество аргументов

  var expected = args.callee.length; // Ожидаемое количество аргументов

  if (actual != expected) { // Если не совпадают, сгенерировать исключение

    throw new Error("Неверное число аргументов: ожидается: " +

               expected + ”; фактически передано " + actual);

  }

}

// Функция, демонстрирующая использование функции, приведенной выше

function f(x, у, z) {

  check(arguments); // Проверить правильность количества аргументов

  return х + у + z; // Выполнить оставшуюся часть функции обычным образом

См. также

Array.length, Function.length