From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../global_objects/function/caller/index.html | 82 ++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 files/uk/web/javascript/reference/global_objects/function/caller/index.html (limited to 'files/uk/web/javascript/reference/global_objects/function/caller') diff --git a/files/uk/web/javascript/reference/global_objects/function/caller/index.html b/files/uk/web/javascript/reference/global_objects/function/caller/index.html new file mode 100644 index 0000000000..ab2fe55383 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/function/caller/index.html @@ -0,0 +1,82 @@ +--- +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")}}

+ +

Див. також

+ + -- cgit v1.2.3-54-g00ecf