定数や変数の使用できる範囲のことをスコープと呼ぶ。
スコープは定数や変数を定義した場所によって異なる。
関数の外側に定義した場合
関数の外側で定義した定数や変数は、プログラムのどこからでも使える。
const name = "hiro60"; //nameが関数の外側で定義した定数
//以下定数nameが使える範囲
const intoroduce = ()=> {
console.log(name); //1️⃣
}
introduce();
console.log(name); //2️⃣
hiro60 //1️⃣
hiro60 //2️⃣
関数の内側に定義した場合
関数の{}内で定義した定数や変数は、その関数の内側でのみ使用できる。
以下のように関数の内側で定義された定数を関数の外側で使用すると参照エラーとなるので注意。
const intoroduce = ()=> {
const name = "hiro60"; //関数の{}内で定義した変数や定数はその内側でのみ使える
console.log(name); //1️⃣
}
intoroduce();
console.log(name); //2️⃣ 範囲外なので定数nameが使えない
hiro60 //1️⃣
ReferenceError: name is not defined //2️⃣
// 参照エラー:変数nameが定義されていません
関数の内外に同じ名前の定数を定義した場合
関数の内側と外側で同じ名前の変数を定義した場合、それらは別々に扱われる。
const name ="hiro60";
const intoroduce = ()=> {
const name ="山田太郎"; //1つめの定数nameとは別もの扱い
console.log(name); //1️⃣
}
intoroduce();
console.log(name); //2️⃣
hiro60 //1️⃣
山田太郎 //2️⃣
関数以外のスコープ
関数だけでなく、ifやswitchなどの条件文、forやwhileなどの繰り返し文などの、中括弧「 {} 」を使う構文でもスコープを作る。
if( 条件式 ) {
consot name ="hiro60";
console.log(name); //1️⃣ 範囲内なので定数nameが使える
}
console.log(name); //2️⃣ 範囲外なので定数nameが使えない
while( 条件式 ) {
const name ="hiro60";
console.log(name); //1️⃣ 範囲内なので定数nameが使える
}
console.log(name); //2️⃣ 範囲外なので定数nameが使えない
コメント