From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../global_objects/function/caller/index.html | 84 ++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 files/ja/web/javascript/reference/global_objects/function/caller/index.html (limited to 'files/ja/web/javascript/reference/global_objects/function/caller/index.html') diff --git a/files/ja/web/javascript/reference/global_objects/function/caller/index.html b/files/ja/web/javascript/reference/global_objects/function/caller/index.html new file mode 100644 index 0000000000..0261d4f48d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/function/caller/index.html @@ -0,0 +1,84 @@ +--- +title: Function.caller +slug: Web/JavaScript/Reference/Global_Objects/Function/caller +tags: + - Deprecated + - Function + - JavaScript + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Function/caller +--- +
{{JSRef}} {{deprecated_header}}
+ +

function.caller プロパティは、指定した関数の呼び出し元の関数を返します。厳格モード、非同期関数、ジェネレーター関数の呼び出し元については null を返します。

+ +

解説

+ +

関数 f が最上位のコードで呼び出された場合、 f.caller の値は {{jsxref("null")}} に、それ以外の場合の値は f を呼び出した関数になります。厳格モード、非同期関数、ジェネレーター関数の呼び出し元についても null を返します。

+ +

このプロパティは、廃止された {{jsxref("Functions/arguments", "arguments")}} オブジェクトの {{jsxref("Functions/arguments/caller", "arguments.caller")}} プロパティを置き換えます。

+ +

特殊プロパティである __caller__ は呼び出し元の activation オブジェクトを返し、スタックの再現に利用できましたが、セキュリティ上の理由により削除されました。

+ +

+ +

再帰呼び出しの場合、このプロパティを用いてコールスタックを再現することはできません。以下について考えてみましょう。

+ +
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()
+
+ +

以下は真になります。

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

従って、stop() 関数のスタックトレースを以下のようにして取得するとします。

+ +
var f = stop;
+var stack = 'Stack trace:';
+while (f) {
+  stack += '\n' + f.name;
+  f = f.caller;
+}
+
+ +

これは無限ループになります。

+ +

+ +

関数の caller プロパティの値を確認する

+ +

以下のコードは、関数の caller プロパティの値を確認します。

+ +
function myFunc() {
+  if (myFunc.caller == null) {
+    return 'The function was called from the top!';
+  } else {
+    return 'This function\'s caller was ' + myFunc.caller;
+  }
+}
+
+ +

仕様書

+ +

いずれの標準仕様でも定義されていません。

+ +

ブラウザーの互換性

+ + + +

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

+ +

関連情報

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