Локальная переменная 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 - 20:42
#permalinkЯ даже не знал о такой переменной...
Автор: ghostik, дата: 22 февраля, 2011 - 12:16
#permalinkПодскажите если я вот так использую функцию она может отжирать много оперативки?
Автор: dim4ek (не зарегистрирован), дата: 10 мая, 2012 - 22:50
#permalinkСпасибо за статью, даже не слышал о такой переменной, и когда она мне попалась при разработке анимации на сайте, не мог найти достойного описании. А тут как свет с небес, все стало ясно. Спасибо огромное, и респект сайту, дай бог Вам долгого существования, таких бы сайтов да побольше и в одном месте а не рыться в поисковике.
Автор: Suriel, дата: 6 сентября, 2012 - 16:14
#permalinkБлагодарю за подобное описание функции! Я именно ее и искал.
Автор: Skas (не зарегистрирован), дата: 11 мая, 2013 - 12:49
#permalink"arguments содержит не объявленные, а реально переданные аргументы"
Это значит, что можно и не описывать аргументы т.е. вот так?:
function func(){
console.log(arguments[0]);
}
func(1);
Автор: Гость (не зарегистрирован), дата: 9 сентября, 2013 - 08:40
#permalinkПочему то в описании функции массивов slice первый параметр обязателен, а в конструкции
функция slice вызывается без аргументов, и тем не менее возвращает массив, содержащий все переданные в функцию аргументы. Это нестыковка документации javascript?
Автор: Гость (не зарегистрирован), дата: 25 ноября, 2013 - 14:09
#permalinkили :
function func() {
func.called++
}
Автор: Н.В. (не зарегистрирован), дата: 28 сентября, 2014 - 07:16
#permalink"Вы можете обращаться к аргументу по номеру, начиная от 0. При этом arguments содержит не объявленные, а реально переданные аргументы.
Следующий пример выведет реально переданные три аргумента, несмотря на то, что в функции их всего два."
"Определимся с терминами".
При объявлении функции указываются ПАРАМЕТРЫ, а не аргументы.
Параметр - это то, что ОБЪЯВЛЯЕТСЯ, аргумент - что ПЕРЕДАЕТСЯ. Слово "реально" в контексте "реально переданные" второй фразы лишнее.
Автор: Н.В. (не зарегистрирован), дата: 28 сентября, 2014 - 08:28
#permalink"arguments
Переменная, доступная внутри функции и содержащая аргументы и ссылку на саму функцию."
Первое. Если аргумент - это значение, которое задается при вызове функции (по определению), то переменная arguments, скорее, содержит параметры, а не аргументы.
Второе. Элементарный анализ показывает, что при описании функции, использующей переменные arguments, стоит опустить указание параметров, (так как их может быть любое количество от 0 до n+1, где n - максимальный номер переменной arguments).
Получается, что в js нет процедур, их роль выполняют функции. Если функция возвращает значение (то есть, содержит оператор return), которое можно присвоить переменной, вызвав данную функцию, то это – функция в чистом виде. Если же она возвращает действие (без return), то эта функция по сути (де факто) является процедурой.
Так вот, в функциях-процедурах наряду с ненулевым может иметь и нулевое количество параметров.
Автор: Н.В. (не зарегистрирован), дата: 28 сентября, 2014 - 10:39
#permalinkСпешу себя опровергнуть. Если в определении функции используется переменная arguments, то ее можно вызывать с ЛЮБЫМ количеством аргументов!
Автор: новичек (не зарегистрирован), дата: 7 апреля, 2015 - 15:19
#permalinkСпасибо, хорошее описание. Но один вопрос: немного не ясно по поводу arguments.callee. Для чего это надо? Именно конкретно arguments.callee. Заранее благодарю за помощь
Автор: nuwen (не зарегистрирован), дата: 3 июня, 2015 - 15:04
#permalink// Делаем функцию. Записываем аргументы в глобалку, и выводим лог function args(){ this.gArgs = arguments; console.log(arguments) } // Вызываем args() [] // Свойство callee сразу есть внутри. Вызываем его. gArgs.callee // Результат function args(){this.lol = arguments; console.log( arguments)}Калли нужен судя по всему, для каких-нибудь особых случаев, когда ты не очевидным способом захочешь изменить свойства функции.
Автор: Гость (не зарегистрирован), дата: 7 сентября, 2023 - 06:12
#permalinkarguments slope - это псевдомассив, который содержит аргументы, переданные функции. Вы можете получить доступ к аргументам, используя индексы, начиная с 0.