Creation of new accounts on MDN is unavailable while we devise a solution to an ongoing denial-of-service attack. We're sorry about the inconvenience! If you see something that needs to be fixed, please file a bug: https://bugzilla.mozilla.org/form.doc

Arguments object

Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

Объект arguments - это объект похожий на массив, который содержит аргументы переданные в функцию.

Синтаксис

arguments

Описание

Объект arguments это локальная переменная доступная внутри любой функции. Свойство arguments объекта Function более недоступно и не должно использоваться.

Вы можете ссылаться на аргументы функции внутри её, используя объект arguments. Он состоит из переданных в функцию аргументов, индекс первого элемента 0. Например, если в функцию пришло 3 аргумента, вы можете сослаться на аргументы следующим образом:

arguments[0]
arguments[1]
arguments[2]

Аргументы могут быть установлены:

arguments[1] = 'new value';

Объект arguments  это не Array. Он похож на массив, но не имеет никаких его свойств кроме  length. Например, у него нет pop метода. Однако, он может быть конвертирован в обычный массив:

var args = Array.prototype.slice.call(arguments);

Вам не следует этого делать, посколько это делает оптимизацию в JavaScript движках невозможной (например, V8). Вместо этого, создайте новый массив с аналогичной длинной и заполните его элементами объекта arguments.

Объект arguments доступен только в теле функции. Попытка получить доступ к arguments вне функции, выбросит ошибку.

Вы можете воспользоваться объектом arguments если Вы функция была вызвана с большим количеством аргументов чем было предусмотрено в объявлении функции. Этот способ удобен для функций в которые нужно передавать переменное количество аргументов. Можно воспользоваться свойством функции arguments.length чтобы определить количество аргументов переданных в функцию, и затем обработать каждый аргумента. (Чтобы определить количество декларированных аргументов у функции воспользуйтесь свойством, Function.length property.)

Свойства

arguments.callee
Ссылка на функцию которая выполняется в текущий момент.
arguments.caller
Ссылка на функцию которая вызвала текущую выполняемую функцию.
arguments.length
Количество переданных аргументов.

Примеры

Создание функции, соединяющей несколько строк

Пример функции, соединяющей несколько строк. Для этой функции объявлен только один аргумент, определяющий символ разделитель соединяемых элементов. Функция определена следующим образом:

function myConcat(separator) {
  var args = Array.prototype.slice.call(arguments, 1);
  return args.join(separator);
}

Вы можете передать любое количество аргументов в эту функцию. Она создает строку, используя каждый аргумент:

// возвращает "red, orange, blue"
myConcat(", ", "red", "orange", "blue");

// получает "elephant; giraffe; lion; cheetah"
myConcat("; ", "elephant", "giraffe", "lion", "cheetah");

// выводит "sage. basil. oregano. pepper. parsley"
myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");

 Функция, создающая HTML списки

Пример создает функцию, которая создает HTML строку списка. Первый аргумент строка, определяющая вид списка, при "u" список обычный, а при "o" - нумерованный:

function list(type) {
  var result = "<" + type + "l><li>";
  var args = Array.prototype.slice.call(arguments, 1);
  result += args.join("</li><li>");
  result += "</li></" + type + "l>"; // end list

  return result;
}

Вы можете использовать любое количество аргументов, а функция добавит каждый элемент в список, заданного первым аргументом типа. Например:

var listHTML = list("u", "One", "Two", "Three");

/* listHTML:

"<ul><li>One</li><li>Two</li><li>Three</li></ul>"

*/

Оставшиеся, дефолтный и деструктуированные параметры

Объект arguments может использоваться совместно с оставшимися параметрами, дефолтными параметрами или деструктуированными параметрами.

function foo(...args) {
  return arguments;
}
foo(1, 2, 3); // { "0": 1, "1": 2, "2": 3 }

However, in non-strict functions, a mapped arguments object is only provided if the function does not contain any rest parameters, any default parameters or any destructured parameters. For example, in the following function that uses a default parameter, 10 instead of 100 is returned:

function bar(a=1) { 
  arguments[0] = 100;
  return a;
}
bar(10); // 10

Спецификации

Спецификация Статус Коментарии
ECMAScript 1st Edition. Standard Initial definition. Implemented in JavaScript 1.1
ECMAScript 5.1 (ECMA-262)
Определение 'Arguments Object' в этой спецификации.
Стандарт  
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Arguments Exotic Objects' в этой спецификации.
Стандарт  

Поддержка браузерами

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Да) (Да) (Да) (Да) (Да)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Да) (Да) (Да) (Да) (Да) (Да)

Смотрите также

Метки документа и участники

 Внесли вклад в эту страницу: Olovyanch, uleming, bychek.ru, fscholz
 Обновлялась последний раз: Olovyanch,