JavaScriptにおけるスコープは、変数や関数がどの範囲で参照可能かを定義します。以下に、JavaScriptにおける主なスコープの種類を説明します。
グローバルスコープ(Global Scope)
グローバルスコープ(Global Scope): グローバルスコープは、コード内のどの場所からでもアクセス可能な最も外側のスコープです。
グローバルスコープで宣言された変数や関数は、どの関数やブロック内でも参照できます。
ローカルスコープ(Local Scope)
ローカルスコープ(Local Scope): ローカルスコープは、関数内で定義されたスコープです。関数内で宣言された変数や関数は、その関数内からのみアクセス可能です。
ローカルスコープは関数ごとに分かれており、関数が呼び出されるたびに新しいローカルスコープが作成されます。
関数スコープ(Function Scope)
関数スコープ(Function Scope): 関数スコープは、古いバージョンのJavaScriptで一般的なスコープの形式です。
関数スコープでは、関数内で宣言された変数は、その関数内でのみアクセス可能です。関数スコープは、ローカルスコープの一種です。
ブロックスコープ(Block Scope)
ブロックスコープ(Block Scope): ブロックスコープは、ES6(ECMAScript 2015)で導入されたスコープの形式です。
ブロックスコープでは、if文やforループ、{}などの中括弧(ブロック)内で変数を宣言すると、その変数はそのブロック内でのみ参照可能です。
ブロックスコープは、letやconstキーワードを使用して変数を宣言することで作成されます。
具体的なスコープの例
以下に、それぞれのスコープの例を示します。
[rml_read_more]
// グローバルスコープ
var globalVariable = "グローバル変数";
function globalFunction() {
// ローカルスコープ (関数スコープ)
var localVariable = "ローカル変数";
if (true) {
// ブロックスコープ
let blockVariable = "ブロック変数";
const constantVariable = "定数変数";
console.log(blockVariable); // 出力: ブロック変数
}
console.log(globalVariable); // 出力: グローバル変数
console.log(localVariable); // 出力: ローカル変数
// console.log(blockVariable); // エラー: blockVariable is not defined
}
globalFunction();
console.log(globalVariable); // 出力: グローバル変数
上記のコードでは、4つの異なるスコープが示されています。
globalVariableはグローバルスコープで宣言されており、関数内外のどこからでもアクセス可能です。
localVariableは関数スコープ内で宣言されており、関数内からのみアクセス可能です。
blockVariableとconstantVariableはブロックスコープ内で宣言されています。ブロック内部からのみアクセス可能です。そのため、コメントアウトされたconsole.log(blockVariable);の行ではエラーが発生します。
まとめ
スコープは、変数の可視性と衝突を制御するために非常に重要です。適切なスコープの使用により、変数名の重複を避けることができ、コードの予測可能性と保守性を高めることができます。