builder by ZDNet Japanをご愛読頂きありがとうございます。

builder by ZDNet Japanは2022年1月31日にサービスを終了いたします。

長らくのご愛読ありがとうございました。

JavaScriptクロージャを完全理解!スコープチェインを知る(後編)

白石俊平(あゆた)
2008-08-01 20:30:00
  • このエントリーをはてなブックマークに追加

 前回はスコープチェインのお話に入るための予備知識として「変数オブジェクト」についてのお話をしました。それを踏まえて、今回はスコープチェインと、それによって実現されているクロージャについてしっかり学んでいきたいと思います。

スコープチェインとは

 変数オブジェクトに関する説明はしっかりご理解頂けましたでしょうか?JavaScriptの変数は、全て変数オブジェクトのプロパティとして扱われている事、そして変数オブジェクトは状況に応じて違うものが使われる(グローバルスコープであればグローバルオブジェクト、ローカルスコープであれば目に見えない変数オブジェクト)というものでした。ローカルスコープに対応する変数オブジェクトは「アクティベーションオブジェクト」と呼ばれ、関数呼び出しが行われると自動的に作成されます。

 しかし実際は、変数を参照するという事は、その場における変数オブジェクト「だけ」を探す訳ではありません。例えば、以下のコードを見てください。関数の中からグローバル変数を参照する事が出来ていますね?

var a = 0;
function f() {
  alert(a);
}
f(); // 0が表示される

 f()の中から「a」という変数を参照し、値を表示する事が出来ています。しかし、f()のアクティベーションオブジェクト内には、「a」に対応する変数は存在しないはずですね。aは、関数の外で宣言されているので、グローバルオブジェクトの中に格納されているはずです。

 つまり変数「a」は次のように探し出されたという事です。まずf()における変数オブジェクトの中から、「a」に対応する変数を探しますが、見つかりません。そこで、その外側にあるグローバルオブジェクトも探す対象となり、そこでaが見つけ出されたという訳です。

 このように、変数オブジェクトを外側に向かって次々とたぐり、参照された変数を探していくという仕組みが「スコープチェイン」と呼ばれるものです。「チェイン」とは「連鎖」という意味ですので、用語の意味がこれでご理解頂けたのではないでしょうか。

 いい換えるとスコープチェインとは、「変数の参照を解決するためにたどられる、変数オブジェクトのリスト」の事だといえます。

 これで、ようやくクロージャを完全に理解する準備ができました。早速次ページから解説していきます。

ブログの新規登録は、2021年12月22日に終了いたしました。

folllow builer on twitter
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]