Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

Объект

Arguments
иллюстрирует важную возможность JavaScript-функций: они могут быть написаны таким образом, чтобы работать с любым количеством аргументов. Следующая функция принимает любое число аргументов и возвращает значение самого большого из них (аналогично ведет себя встроенная функция Math.max):

function max(/*...*/)

{

var m = Number.NEGATIVE.INFINITY;

// Цикл по всем аргументам, поиск и сохранение наибольшего из них

for(var і = 0; і < arguments.length; i++)

if (arguments[i] > max) max = arguments[i];

// Вернуть наибольшее значение return max;

}

var largest = max(1, 10, 100, 2, 3, 1000, 4, 5, 10000, 6); // => 10000

Функции, подобные этой и способные принимать произвольное число аргументов, называются функциями с переменным числом аргументов (ivariadic functions, variable arity functions или varargs functions). Этот термин возник вместе с появлением языка программирования С.

Обратите внимание, что функции с переменным числом аргументов не должны допускать возможность вызова с пустым списком аргументов. Будет вполне разумным использовать объект

arguments[]
при написании функции, ожидающей получить фиксированное число обязательных именованных аргументов, за которыми может следовать произвольное число необязательных неименованных аргументов.

Не следует забывать, что

arguments
фактически не является массивом - это объект
Arguments
. В каждом объекте
Arguments
имеются пронумерованные элементы массива и свойство
length
, но с технической точки зрения это не массив. Лучше рассматривать его как объект, имеющий некоторые пронумерованные свойства. Подробнее об объектах, подобных массивам, рассказывается в разделе 7.11.

У объекта

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

function f(x) {

console.log(x); // Выведет начальное значение аргумента

arguments[0] = null; // При изменении элемента массива изменяется х!

console.log(x); // Теперь выведет "null"

}

Определенно, это не совсем то поведение, которое можно было бы ожидать от настоящего массива. В этом случае

arguments[0]
и х могли бы ссылаться на одно и то же значение, но изменение одной ссылки не должно оказывать влияния на другую.

Эта особенность в поведении объекта

Arguments
была ликвидирована в строгом режиме, предусматриваемом стандартом ECMAScript 5. Кроме того, в строгом режиме имеется еще несколько отличий. В нестрогом режиме
arguments
– это всего лишь обычный JavaScript-идентификатор, а не зарезервированное слово. В строгом режиме не допускается использовать имя
arguments
в качестве имени параметра или локальной переменной функции и отсутствует возможность присваивать значения элементам
arguments.

8.3.2.1. Свойства callee и caller

Помимо элементов своего массива объект

Arguments
определяет свойства
callee
и
caller
. При попытке изменить значения этих свойств в строгом режиме ECMAScript 5 гарантированно возбуждается исключение
ТуреЕrror
. Однако в нестрогом режиме стандарт ECMAScript утверждает, что свойство
callee
ссылается на выполняемую в данный момент функцию. Свойство
caller
не является стандартным, но оно присутствует во многих реализациях и ссылается на функцию, вызвавшую текущую. Свойство
caller
можно использовать для доступа к стеку вызовов, а свойство
callee
особенно удобно использовать для рекурсивного вызова неименованных функций:

  • Читать дальше
  • 1
  • ...
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: