概要
今日はJavaScriptのクロージャについて調べます
JavaScript勉強シリーズ
- JavaScriptのthisについてメモ
- JavaScriptのコンストラクタについて
- JavaScriptのwindowについてのメモ
- JavaScriptのプロトタイプ継承について
- JavaScriptのプロトタイプチェーンについてメモ
- JavaScriptのスコープについてメモ
- JavaScriptの論理演算による存在チェックについて
- JavaScriptのクロージャについてメモ
- JavaScriptのグローバル変数の衝突について
クロージャについて (簡単に)
クロージャとは一言で言うと「状態を持つ関数」
または関数を抜けた後にも生きるローカル変数とか
クロージャの例
function count() { var i = 0; return function() { return ++i; } } var x = count(); x(); // 1 x(); // 2 x(); // 3
前提として以下を知っておく必要がある
- 関数内で別の関数を記述できる
- 関数を返す関数を定義できる
- ガベージコレクションが不要になった領域を自動で解放する
- スコープチェーン
クロージャの仕組み
JavaScriptは不要になった領域を自動で解放するガベージコレクションという機能があり、参照元がなくなったオブジェクトなどは自動的に解放される
通常だと関数count(先の例の関数)の実行終了時に変数iなどはメモリ上から解放されるがグローバル変数xに関数count()が代入されているため変数xにnullをセットしない限り変数iは参照が残ることになる
この性質にスコープテェーンを利用してローカル変数の値を参照し続けるデータ構造がクロージャとなる
参考
- 【JavaScript】メモリの浪費を避けるコーディング
- [JavaScript] 猿でもわかるクロージャ超入門 まとめ
- パーフェクトJavaScript (書籍)
コメントを書く
コメント一覧