--- title: Function.caller slug: Web/JavaScript/Reference/Global_Objects/Function/caller tags: - Function - JavaScript - Властивість translation_of: Web/JavaScript/Reference/Global_Objects/Function/caller ---
Властивість 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")}}