arguments

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

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

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

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

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

Пример:
Выделить все
function func(a,b) {
  alert(arguments[0])
  alert(arguments[1])
  alert(arguments[2])
}
 
func(1,2,3,4)

Кроме цифровых индексов, у 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