JavaScript スコープ
スコープは、変数のアクセシビリティ(可視性)を決定します。
JavaScriptには3種類のスコープがあります。
- ブロックスコープ
- 関数スコープ
- グローバル スコープ
ブロックスコープ
ES6(2015)より前は、JavaScript にはグローバルスコープと関数スコープしかありませんでした。
ES6では、2つの重要な新しいJavaScriptキーワードlet
とconst
が導入されました。
これらの2つのキーワードは、JavaScriptでブロックスコープを提供します。
{ }ブロック内で宣言された変数は、ブロックの外側からアクセスできません。
例
var
キーワードを使用して宣言された変数にはブロックスコープを含めることはできません。
{ }ブロック内で宣言された変数は、ブロックの外側からアクセスできます。
例
ローカルスコープ
JavaScript関数内で宣言された変数は、関数に対してローカルになります。
例
ローカル変数には関数スコープがあります。
関数内からのみアクセスできます。
ローカル変数は関数内でのみ認識されるため、同じ名前の変数を別の関数で使用できます。
ローカル変数は、関数の開始時に作成され、関数の終了時に削除されます。
関数スコープ
JavaScriptには関数スコープがあり、各関数は新しいスコープを作成します。
関数内で定義された変数は、関数の外部からアクセス(表示)できません。
var
、let
とconst
で宣言された変数は関数内で宣言された場合には、非常に似ています。
それらは全て関数スコープを持っています。
グローバル変数
関数の外で宣言された変数は、グローバル変数になります。
例
グローバル変数にはグローバルスコープがあります。
Webページ上のすべてのスクリプトと関数がアクセスできます。
グローバルスコープ
グローバルに(任意の関数の外で)宣言された変数にはグローバルスコープがあります。
グローバル変数には、JavaScriptプログラム内のどこからでもアクセスできます。
var
、let
とconst
で宣言された変数はブロックの外で宣言された場合は非常に似ています。
それらは全てグローバルスコープを持っています。
JavaScript 変数
JavaScriptでは、オブジェクトと関数も変数です。
スコープは、コードのさまざまな部分から変数、オブジェクト、関数にアクセスできるかどうかを決定します。
自動的にグローバル
宣言されていない変数に値を代入すると、その変数は自動的にグローバル変数になります。
このコード例は、値が関数内で割り当てられている場合でもグローバル変数carName
を宣言します。
ストリクトモード
最新のブラウザはすべて、「厳密モード」でのJavaScriptの実行をサポートしています。
厳格モードの使用方法については、このチュートリアルの後の章で詳しく説明します。
「厳密モード」では、宣言されていない変数は自動的にグローバルになりません。
HTMLのグローバル変数
JavaScriptの場合、グローバルスコープはJavaScript環境です。
HTMLでは、グローバルスコープはwindowオブジェクトです。
var
キーワードで定義されたグローバル変数はwindowオブジェクトに属します。
let
キーワードで定義されたグローバル変数はwindowオブジェクトに属していません。
警告
意図しない限り、グローバル変数を作成しないでください。グローバル変数(または関数)は、window変数(または関数)を上書きできます。windowオブジェクトを含むすべての関数は、グローバル変数と関数を上書きできます。
JavaScript変数の有効期間
JavaScript変数の有効期間は、宣言された時点から始まります。
関数(ローカル)変数は、関数が完了すると削除されます。
Webブラウザーでは、ブラウザーウィンドウ(またはタブ)を閉じるとグローバル変数が削除されます。
関数の引数
関数の引数(パラメーター)は、関数内でローカル変数として機能します。
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。