2017-07-01 1 views
0

こんにちは、私はJavaScriptでクロージャの概念を検討していました。私はそれを理解するのが難しいと思っています。誰か助けてくれますか?JavaScriptで終了しますか?

function a(name) { 
return function() { 
    console.log("Hello "+ name); 
} 
} 
var b = a("MyName"); 
b(); 

閉鎖によると、内側の関数は外側の関数の実行がcompeledされた後も、その外側の関数の変数にアクセスする必要がありますし、それがスタックにもう存在しないのです。外部関数の実行が完了した後でも、内部関数がその変数にどのようにアクセスできるか説明してください。私は上記のコードを試して、それは期待どおりに動作していますが、私は混乱していますか?

+0

これを確認してくださいhttps://stackoverflow.com/questions/31735129/how-do-javascript-closures-work-at-a-low-level –

答えて

0
function a(name) { 
return function() { 
    console.log("Hello "+ name); 
} 
} 
var b = a("MyName"); 
b(); 

クロージャは、関数とその関数が宣言されたレキシカル環境の組み合わせです。この環境は、クロージャが作成された時点でスコープ内にあったローカル変数で構成されます。この場合、bはa()の実行時に返される内部関数のインスタンスへの参照です。返された関数のインスタンスは、変数名が存在するそのレキシカル環境への参照を保持します。このため、b()が呼び出されると、変数名は引き続き使用可能になり、nameはconsoleに渡されます。

関連する問題