--- title: arguments.callee slug: Web/JavaScript/Reference/Functions/arguments/callee translation_of: Web/JavaScript/Reference/Functions/arguments/callee ---
{{jsSidebar("Functions")}}

Свойство 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
{{SpecName('ES1')}} {{Spec2('ES1')}} Initial definition. Implemented in JavaScript 1.2
{{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}} {{Spec2('ES5.1')}}  
{{SpecName('ES6', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}} {{Spec2('ES6')}}  
{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}} {{Spec2('ESDraft')}}  

Browser compatibility

{{Compat}}

See also