2016-06-18 12 views
-2

トピックタイトルには、その動作が分かりません。だからここに私の簡単な例です:JavaScript関数の戻り値にローカルスコープ変数がどのように格納されているのですか?

function bar() { 
    var a = 0; 
    return { 
     baz: function() { 
      console.log(a++); 
     } 
    } 
} 
var foo = bar(); 
foo.baz() // 0 
foo.baz() // 1 
foo.baz() // 2 

私は「バー」機能を使用する場合、それはそれで置き換え変数とすべてのローカル変数で、このオブジェクト

{ 
    baz: function() { 
     console.log(0++); 
    } 
} 

私を返すために必要があることを考えなければなりません実行後に削除されましたが、それはありません!変数 "a"は保存され、使用できるので、私はそれを取得しません。誰かが私にこれを説明することができ、

+0

変数は、関数を含む関数が返されても、どこかから参照されている限り、離れません。 – melpomene

答えて

4

はJavaScriptをよく読んでくださいクロージャ:

クロージャはローカルで使用されている独立した(無料)変数 (変数を参照する機能ですが、囲みスコープで定義されています)。 つまり、これらの関数は、 が作成された環境を「覚えています」。

出典:https://developer.mozilla.org/en/docs/Web/JavaScript/Closures

あなたは、この優れたを理解し、すべてのJSの開発者のために実際にはかなり重要であるのに役立ちます。

+0

JSのすべての機能が技術的に閉鎖であることに注意する価値があります。 –

関連する問題