arguments.callee

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

Описание

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

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

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

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

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

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

 

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

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

 

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

 

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

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

factorial(7);

 

Specifications

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) Стандарт Initial definition. Implemented in JavaScript 1.2
ECMAScript 5.1 (ECMA-262)
Определение 'Arguments Object' в этой спецификации.
Стандарт  
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Arguments Exotic Objects' в этой спецификации.
Стандарт  
ECMAScript (ECMA-262)
Определение 'Arguments Exotic Objects' в этой спецификации.
Живой стандарт  

Browser compatibility

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)

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 (Да) (Да) (Да) (Да) (Да) (Да)

See also