JavaScriptの変数のスコープについてまとめています。
※以下の記事も参照。
・JavaScriptプログラミング、メモの”JavaScriptのスコープに関する注意点”
・TypeScriptプログラミング、メモの”変数の巻上げ(hoisting)とlet”
※目次をクリックすると目次の下部にコンテンツが表示されます。
変数の宣言とスコープ
①var
・ローカル変数とグローバル変数、両方の宣言に利用できる。
・varを伴って宣言した変数のスコープは実行コンテキスト(execution context)であり、これは変数を含んでいる関数、または関数の外で宣言された変数はグローバルになる。
②単純に変数に値を代入
・常にグローバル変数として宣言される。
・StrictモードのJavaScriptの場合は警告が出される。この方法は使用すべきではない。
③let
・ブロックスコープのローカル変数を宣言することができる。
・letを使用することで、変数のスコープをそれが使用されたブロック、文または式に限定することができる。
これはvarキーワードとは異なり、グローバル変数を定義したり、ブロックスコープに留まらない関数全体でのローカル変数を定義したりしない。
・ローカル変数とグローバル変数、両方の宣言に利用できる。
・varを伴って宣言した変数のスコープは実行コンテキスト(execution context)であり、これは変数を含んでいる関数、または関数の外で宣言された変数はグローバルになる。
②単純に変数に値を代入
・常にグローバル変数として宣言される。
・StrictモードのJavaScriptの場合は警告が出される。この方法は使用すべきではない。
③let
・ブロックスコープのローカル変数を宣言することができる。
・letを使用することで、変数のスコープをそれが使用されたブロック、文または式に限定することができる。
これはvarキーワードとは異なり、グローバル変数を定義したり、ブロックスコープに留まらない関数全体でのローカル変数を定義したりしない。
変数のスコープ
〇global変数
・変数を関数の外側で宣言すると、その変数はその文書のどのコードからも使用できるようになる。
〇local変数
・変数を関数の内部で宣言すると、その変数はその関数の中でしか使用できない。
・ECMAScript6以前のJavaScriptにはブロック文のスコープがない。
ブロック内で宣言した変数はブロックを内包している関数(あるいはグローバルスコープ)に対して局所化される。
・変数を関数の外側で宣言すると、その変数はその文書のどのコードからも使用できるようになる。
〇local変数
・変数を関数の内部で宣言すると、その変数はその関数の中でしか使用できない。
・ECMAScript6以前のJavaScriptにはブロック文のスコープがない。
ブロック内で宣言した変数はブロックを内包している関数(あるいはグローバルスコープ)に対して局所化される。
変数の巻上げ
・JavaScriptの変数は、関数内のいかなる場所で宣言されたとしても、その関数の先頭で宣言されたのと同じように動作する。