javascript - js 匿名関数関連の問題
怪我咯
怪我咯 2017-07-05 10:50:25
0
2
860
リーリー

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

になるはずです リーリー

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

怪我咯
怪我咯

走同样的路,发现不同的人生

全員に返信 (2)
刘奇

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

リーリー

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

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

リーリー

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

いいねを押す+0
    刘奇

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

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

    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!