クロージャについては最初、
https://asciidwango.github.io/js-primer/basic/function-scope/
に記述があり、それを見ていた。
Contents
静的スコープ
や
メモリ管理の仕組み
について説明しており、関係はあるのだと思うが、いまいち具体的にまとめられなかった。
次に見つけたのが
クロージャ
この記事にあるコードで説明がつきそう。
function makeFunc() { var name = "Mozilla"; function displayName() { alert(name); } return displayName; } var myFunc = makeFunc(); myFunc();
関数makeFunc内で宣言された変数name。これはmakeFunc関数の呼び出しが終わったらガベージコレクションにより消えるんじゃないのか?という話。
しかし
var myFunc = makeFunc();
により変数myFuncには関数displayName
への参照が代入されており、その関数displayName
内で変数nameが参照されているので、変数nameはどこからも参照されなくなった変数とは言えない。よって変数nameは消えない、だからクロージャがちゃんと動くんだよ、ということではないか?
もっと詳しい説明を見つけるまでは、今はそれで理解しとくしかない。