0

ここで定義した関数に「caller」のプロパティを使いたい

このスタイルの関数宣言では問題なく動作します

    function g() {
      alert(g.caller.name) // f
}

   function f() {
      alert(f.caller.name) // undefined
      g()
}

f()

このためのJSfiddle

しかし、私の関数宣言は次のようなものです

    g = function() {
      alert(g.caller.name) // expected f, getting undefined
    }


   f = function() {
     alert("calling f")
     alert(f.caller.name) // undefined
     g()
   }

 f()

そして、私は未定義になっています(基本的に何も得られません)

このためのJSfiddle

コードを書き直さなくても caller プロパティを使用できる方法はありますか? また、私は JS を使用するのが初めてなので、使用方法と関数の宣言に誤りがなかったことを願っています。

4

1 に答える 1

1

この機能...

f = function() {
    g();
};

...名前がありません。これは、識別子を持つ変数に割り当てられた無名関数fです。その関数を名前付き関数式にすると、そのまま機能します。

f = function f() {
    g();
};

その無名関数はグローバル実行コンテキストから呼び出されるため、そのcallerプロパティはnullであることに注意してください (JSFiddle では ではなくnull、コードを呼び出すために JSFiddle が呼び出す関数になります)。

関数宣言と関数の違いの 1 つを示しました。最初の例は、関数宣言を示しています。それらには識別子が必要です。2 番目の例では、関数式を使用しています。識別子はオプションであり、関数自体の範囲内にのみあります。

于 2013-06-26T10:18:34.727 に答える