Книга: JavaScript. Подробное руководство, 6-е издание

Arguments

Arguments

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

Оглавление книги


Генерация: 0.080. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз