--- title: Function.caller slug: Web/JavaScript/Reference/Global_Objects/Function/caller tags: - Function - JavaScript - Властивість translation_of: Web/JavaScript/Reference/Global_Objects/Function/caller ---
{{JSRef}} {{non-standard_header}}

Властивість function.caller повертає функцію, яка викликала вказану функцію. Ця властивість заборонена у строгому режимі.

Опис

Якщо функція f викликана кодом верхнього рівня, значенням f.caller буде {{jsxref("null")}}, інакше це буде функція, яка викликала f.

Ця властивість замінює застарілу властивість {{jsxref("Functions/arguments/caller", "arguments.caller")}} об'єкта {{jsxref("Functions/arguments", "arguments")}}.

Спеціальна властивість __caller__, яка повертала об'єкт активації функції, що викликала задану функцію, дозволяючи відбудовувати стек викликів, була прибрана з міркувань безпеки.

Примітки

Зауважте, що у випадку рекурсії ви не зможете відбудувати стек викликів за допомогою цієї властивості. Розглянемо:

function f(n) { g(n - 1); }
function g(n) { if (n > 0) { f(n); } else { stop(); } }
f(2);

У момент, коли викликається stop(), стек викликів буде таким:

f(2) -> g(1) -> f(1) -> g(0) -> stop()

Наступне дорівнює true:

stop.caller === g && f.caller === g && g.caller === f

Отже, якщо ви спробуєте отримати стек викликів у функції stop() ось так:

var f = stop;
var stack = 'Стек викликів:';
while (f) {
  stack += '\n' + f.name;
  f = f.caller;
}

цикл ніколи не зупиниться.

Приклади

Перевірка значення властивості функції caller

Наступний код перевіряє значення властивості функції caller.

function myFunc() {
  if (myFunc.caller == null) {
    return 'Ця функція викликана з верхнього рівня!';
  } else {
    return 'Ця функція викликана ' + myFunc.caller;
  }
}

Специфікації

Не є частиною жодних специфікацій. Реалізовано у JavaScript 1.5.

Сумісність з веб-переглядачами

{{Compat("javascript.builtins.Function.caller")}}

Див. також