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 2017 Draft (ECMA-262)
Определение 'Arguments Exotic Objects' в этой спецификации.
Черновик  

Browser compatibility

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

Метки документа и участники

 Внесли вклад в эту страницу: In4in
 Обновлялась последний раз: In4in,