JavaScriptクロージャを完全理解!スコープチェインを知る(後編)
前回はスコープチェインのお話に入るための予備知識として「変数オブジェクト」についてのお話をしました。それを踏まえて、今回はスコープチェインと、それによって実現されているクロージャについてしっかり学んでいきたいと思います。
スコープチェインとは
変数オブジェクトに関する説明はしっかりご理解頂けましたでしょうか?JavaScriptの変数は、全て変数オブジェクトのプロパティとして扱われている事、そして変数オブジェクトは状況に応じて違うものが使われる(グローバルスコープであればグローバルオブジェクト、ローカルスコープであれば目に見えない変数オブジェクト)というものでした。ローカルスコープに対応する変数オブジェクトは「アクティベーションオブジェクト」と呼ばれ、関数呼び出しが行われると自動的に作成されます。
しかし実際は、変数を参照するという事は、その場における変数オブジェクト「だけ」を探す訳ではありません。例えば、以下のコードを見てください。関数の中からグローバル変数を参照する事が出来ていますね?
var a = 0;
function f() {
alert(a);
}
f(); // 0が表示される
f()の中から「a」という変数を参照し、値を表示する事が出来ています。しかし、f()のアクティベーションオブジェクト内には、「a」に対応する変数は存在しないはずですね。aは、関数の外で宣言されているので、グローバルオブジェクトの中に格納されているはずです。
つまり変数「a」は次のように探し出されたという事です。まずf()における変数オブジェクトの中から、「a」に対応する変数を探しますが、見つかりません。そこで、その外側にあるグローバルオブジェクトも探す対象となり、そこでaが見つけ出されたという訳です。
このように、変数オブジェクトを外側に向かって次々とたぐり、参照された変数を探していくという仕組みが「スコープチェイン」と呼ばれるものです。「チェイン」とは「連鎖」という意味ですので、用語の意味がこれでご理解頂けたのではないでしょうか。
いい換えるとスコープチェインとは、「変数の参照を解決するためにたどられる、変数オブジェクトのリスト」の事だといえます。
これで、ようやくクロージャを完全に理解する準備ができました。早速次ページから解説していきます。
- コメント(6件)
ありがとうございました。
いままで曖昧だったのですっきりです
今後の執筆活動も期待しております。
ありがとうございました。
rubyも柔軟ですが、それに匹敵しそうですね。
- ホワイトペーパー



