クロージャ | 割と詳細に書いてある記事がわかりやすかったのでシェア
Hello World!
前回の記事でクロージャについて紹介したのですが、理解に一役かってくれた記事があるので今回はそちらの記事のざくっとしたまとめを残しておきたいと思います。
( ・∇・)
JavaScriptにおけるLexical Environmentとは、変数や関数をストックしているオブジェクトのこと。
- スクリプトができた段階では、空のオブジェクト(global Lexical Environment)。
- 関数宣言(fuction declaration)がある場合は、まずは関数がセットされる。
- 全てのローカル変数名がキー名、その値がバリューとしてストックされていく
- 内側のオブジェクトから検索をはじめ、見つかるまで外側に参照する範囲をひろげていくことができる。
- 関数が実行されるたびに(function invocation)新しくつくられる
- 関数実行後も、使われるか可能性のある関数があるかぎりLexical Environmentは存在する
ゆえに、クロージャを内臓している関数は、実行のたびに前回の計算値をひきついだまま、次の計算ができる、ということのようです。
クロージャが特別、というよりもJavaScriptそのものがオブジェクトベースでなりたっていて、どのタイミングでどのオブジェクトが発生し、内部のローカル変数がなければ、外部に参照できる変数があるかどうかで、挙動がかわってくる。
ということなのかなとおもいました。
詳しくは元記事をご参照ください。
( ・∇・)!