クロージャーについて javascript

クロージャについては最初、

https://asciidwango.github.io/js-primer/basic/function-scope/

に記述があり、それを見ていた。

静的スコープ

メモリ管理の仕組み

について説明しており、関係はあるのだと思うが、いまいち具体的にまとめられなかった。


次に見つけたのが

クロージャ

この記事にあるコードで説明がつきそう。

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は消えない、だからクロージャがちゃんと動くんだよ、ということではないか?

もっと詳しい説明を見つけるまでは、今はそれで理解しとくしかない。

コメントを残す

メールアドレスが公開されることはありません。