Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.
Объект 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 | (Да) | (Да) | (Да) | (Да) | (Да) | (Да) |