2

次の JavaScript コードの意味がわかりません。

var func = f()
    func() 

誰かが私にそれを説明する余裕がありますか? 確かに、私は JavaScript の専門家ではありません。ネットで見つけた完全なコードは次のとおりです。

    var a = 1
function f() {

  function g() {
    alert(a)
  }

  return g 
}

var func = f()
func() // 1

それはクロージャ、レキシカル環境を説明しようとしていました。どんな助けでも大歓迎です。http://javascript.info/tutorial/closuresで見つけました

4

3 に答える 3

0

実際、クロージャーを説明するのに最適な例ではありません。それはそれを作成しません。

この場合のクロージャを適切に説明するには、コードを次のようにする必要があります。

function f() {

  var a = 1

  function g() {
    alert(a)
  }

  return g 
}

var func = f();
func() // 1

ポイントは、関数get が実行されると、呼び出された関数の実行コンテキストへの参照を含むffunction を返すことです(関数内で宣言されたすべての変数、渡された引数、スコープチェーンなどを含みます)。通常、実行後、ガベージ コレクターはメモリから実行コンテキストを削除する必要がありますが、返された関数はそれへの参照を保持しているため、削除されません。gfg

関数funcが呼び出されると、aいわゆるクロージャーから変数にアクセスして警告しますが、この変数にアクセスする他の方法はもうありません。

そこで何が起こっているのかを深く理解したくない場合は、この記事を読むことをお勧めします。かなり古いですが、トピックについて非常に詳細に説明しています。

私が最近発見したもう1 つの優れたものは、もう少し理解しやすいので、それから始めて、最初に述べたものに戻ることができます。

これが少し役に立てば幸いです。

于 2013-09-01T15:33:40.507 に答える