ホームページ  >  に質問  >  本文

javascript - js 匿名関数関連の問題

リーリー

私自身が遭遇した小さな問題です。あなたがそれを持っているかどうかはわかりません。私は最近、匿名関数を書くのが好きです。これを最初に見たとき、習慣的にそれを逆から見て、obj が公開されているだけだと思いました。なぜですか。それは、sayHello を実行するときに、sayHi を実行できますか?
js の実行メカニズムについては以前に見たことがあると思いました。
これが当てはまるかどうかはわかりません:
js は実行時に事前に解析される必要があります
したがって、sayHello が実行される前に、匿名関数の SayHello は

になるはずです リーリー

私は専門家ではないので、これが正しい理解かどうかわかりませんが?

怪我咯怪我咯2633日前893

全員に返信(2)返信します

  • 怪我咯

    怪我咯2017-07-05 10:52:25

    これはスコープの問題です。
    関数は作成時にスコープを保存していることに注意してください。コードをこれに変更しても、後でどこで呼び出しても結果は同じになります。以下で簡単に分析できるように、これをすぐに実行します。関数を呼び出して名前を付け、テストと呼びます):

    リーリー

    分析、obj.sayHello 関数が作成されると、現在のスコープがすべて保存されます。 リーリー

    現時点では、sayHi 関数がテストのスコープ内にあることは明らかなので、この参照は、グローバル スコープで実行されても、グローバル スコープで再定義された SayHi には影響を与えることができません。これは関数のテスト検索からのもので、次の例を見ると理解できます:

    リーリー

    foo関数のスコープはfoo自身+グローバルスコープなので、即時実行関数で実行しても出力値は20ではなく10のみになります

    返事
    0
  • 怪我咯

    怪我咯2017-07-05 10:52:25

    これはよく理解できません。これはクロージャの概念である必要があります。 http://www.ruanyifeng.com/blo...

    関数内の変数にアクセスするときは、まず関数が変数を宣言しているかどうかを確認します。宣言されていない場合は、外側のスコープに移動して見つけます。これは、私が見つけた関数 (function(){})() の場合です。この時点でsayHiが宣言されていない場合は、関数の外側の層でそれを探し続けます。全体の状況を直接見つけても、まだ存在しません。そうすればもう何もありません

    返事
    0
  • キャンセル返事