arguments.callee

Свойство callee псевдомассива arguments хранит ссылку на функцию-родитель.

Описание

Предупреждение: Внимание: В ES5 strict mode использование arguments.callee запрещено.

Зачем вообще использовать arguments.callee?

В ранних версиях javaScript отсутствовала такая фишка, как Named Function Expression и единственным спасением было свойство callee. К примеру:

js
var f = function test() {
  alert(typeof test); //undefined
  alert(typeof arguments.callee); //function
};

В нынешние времена, когда мы уже можем работать с NFE, надобность в использовании свойства callee сама собой отпадает**.**

js
var f = function test() {
  alert(typeof test); //function
};

Действительно незаменимым оно остаётся всего в одной ситуации. Когда мы создаём анонимную функцию напрямую через конструктор Function.

js
var b = new Function("", "alert(typeof arguments.callee)");

Пример использования

Использование arguments.callee для создания рекурсии

js
var factorial = function (n) {
  return n == 1 ? 1 : n * arguments.callee(n - 1);
};

factorial(7);

Specifications

Specification
ECMAScript Language Specification
# sec-arguments-exotic-objects

Совместимость с браузерами

BCD tables only load in the browser

See also