了解!
では「2段階目:ネスト(入れ子)したスコープ」について、文法もしっかり解説します。
「スコープは入れ子(ネスト)にできる → 内側からは外側が見える、でも逆は見えない」
scope-step2.js
//変数xに数値100を代入(グローバルスコープ)
const x = 100;
//関数outerFunctionを宣言(外側の関数)
function outerFunction() {
//変数yに数値200を代入(outerFunctionのスコープ)
const y = 200;
//innerFunctionという内側の関数を宣言(ネストした関数)
function innerFunction() {
//変数zに数値300を代入(innerFunctionのスコープ)
const z = 300;
//xはグローバル、yはouterFunction、zはinnerFunction → すべて見える
console.log("xの値は: " + x); // 100
console.log("yの値は: " + y); // 200
console.log("zの値は: " + z); // 300
}
//innerFunctionを実行
innerFunction();
//zはinnerFunction内で作った変数なので、ここでは使えない(エラー)
console.log(z); // ← これはエラー!
}
//outerFunctionを実行
outerFunction();
function 関数名() { ... }
→ 関数は中にさらに関数を書ける(これがネスト=入れ子)
const 変数名 = 値;
→ その変数は「そのスコープ(波カッコ{}
の中)」でだけ使える。
グローバルスコープ: x
└─ outerFunctionスコープ: y
└─ innerFunctionスコープ: z