ここまでの振り返り
今日まで勉強してきた Javascript で、自分の理解が甘いところをまとめてみる。
クロージャ
まずは定義。
関数内に出現する自由変数(関数内で宣言されていない変数)の解決の際、実行時の環境ではなく、関数を定義した環境の変数を参照できるようなデータ構造。
クロージャとは - はてなキーワード
これに対して Mozila の説明がわかりやすかった。
クロージャ - JavaScript | MDN
function makeFunc() { var name = "Mozilla"; function displayName() { alert(name); } return displayName; } var myFunc = makeFunc(); myFunc();
var myFunc = make Func(); の時点では displayName が指すオブジェクトを myFunc に割り当てているだけで displayName() の実行はされていない。
displayName() が実行されるのは myFunc() のところ。
なので、これが実行された時は name が定義されていないことになるが、問題なく動く。
なぜなら、これは実行時の環境ではなく定義した時点での環境の変数が参照されるから。
クロージャを使うメリットに関してはこれがわかりやすかった。
今までアクセスを限定することに寄って値の操作などを防ぐ、というメリットしか知らなかったが、このブログによって計算量が減るということがよく理解できた。
私が今までクロージャを理解できなかった理由 - 主にプログラムを勉強するブログ