スコープ
スコープとは、変数の有効範囲のことで、グローバルスコープとローカルスコープの2種類があります。
グローバルスコープ
グローバルスコープは、どの位置からでも参照することができます。
グローバルスコープを持つ変数をグローバル変数と呼びます。
JavaScript
var foo = '0123456789';
var bar = function() {
// 参照可能
return foo;
};
// 参照可能
alert(foo);
// 参照可能
alert(bar());
ローカルスコープ
ローカルスコープはローカル変数を囲んでいる直上の関数またはブロック内でのみ参照することができます。
ローカルスコープを持つ変数をローカル変数と呼びます。
また、関数内のスコープを関数スコープ、ブロック内のスコープをブロックスコープと呼びます。
- ※ ブロックとは中括弧({から})で囲まれた範囲のことです。
関数スコープはfunctionキーワードなどで定義された関数の範囲であるのに対し、ブロックスコープは関数のほか、for文なども含む範囲です。
JavaScript
var bar = function() {
var foo = '0123456789';
var baz = function() {
// 参照可能
return foo;
};
// 参照可能
alert(foo);
// 参照可能
alert(baz());
};
// 参照不可能(エラー)
alert(foo);
スコープチェーン
変数の参照を解決する際に、アクティベーションオブジェクトを巡る仕組みのことです。
JavaScriptの性質として、変数を参照する際、自身のスコープのアクティベーションオブジェクトを検索し、該当する変数がない場合は親のスコープを検索、さらに該当する変数がなかった場合はさらに親のスコープを検索していきます。