Javascript.RU

arguments

Переменная, доступная внутри функции и содержащая аргументы и ссылку на саму функцию.

Описание, примеры

Локальная переменная arguments доступна внутри функций.

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

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

function func(a,b) {
  alert(arguments[0])
  alert(arguments[1])
  alert(arguments[2])
}

func(1,2,3)

Кроме цифровых индексов, у arguments есть свойство length, такое же как у массива.

Благодаря этому можно вызывать функции с переменным числом параметров. В следующем примере функция возвращает сумму всех аргументов.

Пример: сумма аргументов
function sum() {
  var s = 0
  for(var i=0; i<arguments.length; i++) s += arguments[i]
  return s
}

Несмотря на доступ по индексу и наличие свойства length, arguments не является массивом, т.е не принадлежит типу Array.

Поэтому для arguments нельзя напрямую вызвать методы этого класса:

arguments.pop() // ошибка !

Можно, однако, вызвать методы Array через apply/call:

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

Ссылка на функцию arguments.callee

Кроме аргументов, arguments содержит ссылку на выполняющуюся функцию.

Ее можно использовать для задания и чтения статических свойств.
В следующем примере для этого используется статическое свойство called.

Пример: подсчет количества выполнений
function func() {
   arguments.callee.called++
}
func.called = 0;

func()
func()
alert(func.called) // 2

Автор: TaskO (не зарегистрирован), дата: 8 февраля, 2010 - 21:42
#permalink

Я даже не знал о такой переменной...


Автор: ghostik, дата: 22 февраля, 2011 - 13:16
#permalink

Подскажите если я вот так использую функцию она может отжирать много оперативки?

gtime = setTimeout(arguments.callee, 1000);

Автор: DreamTheater, дата: 22 мая, 2011 - 18:21
#permalink

Автор: 0xff.su (не зарегистрирован), дата: 3 февраля, 2012 - 18:37
#permalink

0xff.su

Можно


Автор: dim4ek, дата: 10 мая, 2012 - 23:50
#permalink

Спасибо за статью, даже не слышал о такой переменной, и когда она мне попалась при разработке анимации на сайте, не мог найти достойного описании. А тут как свет с небес, все стало ясно. Спасибо огромное, и респект сайту, дай бог Вам долгого существования, таких бы сайтов да побольше и в одном месте а не рыться в поисковике.


Автор: Suriel, дата: 6 сентября, 2012 - 17:14
#permalink

Благодарю за подобное описание функции! Я именно ее и искал.


Автор: Skas (не зарегистрирован), дата: 11 мая, 2013 - 13:49
#permalink

"arguments содержит не объявленные, а реально переданные аргументы"
Это значит, что можно и не описывать аргументы т.е. вот так?:


function func(){
console.log(arguments[0]);
}

func(1);


Автор: Гость (не зарегистрирован), дата: 16 июня, 2015 - 20:23
#permalink

да


Автор: Гость (не зарегистрирован), дата: 11 мая, 2013 - 22:45
#permalink

Илья! Куда подевались комментарии на learn.javascript.ru.


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2013 - 09:40
#permalink

Почему то в описании функции массивов slice первый параметр обязателен, а в конструкции

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

функция slice вызывается без аргументов, и тем не менее возвращает массив, содержащий все переданные в функцию аргументы. Это нестыковка документации javascript?


Автор: Гость (не зарегистрирован), дата: 25 ноября, 2013 - 15:09
#permalink

или :
function func() {
func.called++
}


Автор: Н.В. (не зарегистрирован), дата: 28 сентября, 2014 - 08:16
#permalink

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

Следующий пример выведет реально переданные три аргумента, несмотря на то, что в функции их всего два."

"Определимся с терминами". При объявлении функции указываются ПАРАМЕТРЫ, а не аргументы.
Параметр - это то, что ОБЪЯВЛЯЕТСЯ, аргумент - что ПЕРЕДАЕТСЯ. Слово "реально" в контексте "реально переданные" второй фразы лишнее.


Автор: Н.В. (не зарегистрирован), дата: 28 сентября, 2014 - 09:28
#permalink

"arguments

Переменная, доступная внутри функции и содержащая аргументы и ссылку на саму функцию."

Первое. Если аргумент - это значение, которое задается при вызове функции (по определению), то переменная arguments, скорее, содержит параметры, а не аргументы.

Второе. Элементарный анализ показывает, что при описании функции, использующей переменные arguments, стоит опустить указание параметров, (так как их может быть любое количество от 0 до n+1, где n - максимальный номер переменной arguments).
Получается, что в js нет процедур, их роль выполняют функции. Если функция возвращает значение (то есть, содержит оператор return), которое можно присвоить переменной, вызвав данную функцию, то это – функция в чистом виде. Если же она возвращает действие (без return), то эта функция по сути (де факто) является процедурой.
Так вот, в функциях-процедурах наряду с ненулевым может иметь и нулевое количество параметров.


Автор: Н.В. (не зарегистрирован), дата: 28 сентября, 2014 - 11:39
#permalink

Спешу себя опровергнуть. Если в определении функции используется переменная arguments, то ее можно вызывать с ЛЮБЫМ количеством аргументов!


Автор: новичек (не зарегистрирован), дата: 7 апреля, 2015 - 16:19
#permalink

Спасибо, хорошее описание. Но один вопрос: немного не ясно по поводу arguments.callee. Для чего это надо? Именно конкретно arguments.callee. Заранее благодарю за помощь


Автор: nuwen (не зарегистрирован), дата: 3 июня, 2015 - 16:04
#permalink
// Делаем функцию. Записываем аргументы в глобалку, и выводим лог
function args(){ this.gArgs = arguments; console.log(arguments) }

// Вызываем
args()
[]

// Свойство  callee сразу есть внутри. Вызываем его. 
gArgs.callee

// Результат
function args(){this.lol = arguments; console.log( arguments)}

Калли нужен судя по всему, для каких-нибудь особых случаев, когда ты не очевидным способом захочешь изменить свойства функции.


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
8 + 4 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама
Содержание

Учебник javascript

Основные элементы языка

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

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum