スコープとはその変数の有効範囲のこと。関数の中にある変数の関数スコープ(ローカルスコープ)について、基本ルールは以下のとおり。
// トップレベルで宣言した変数はどの関数からでもアクセスできる。
let トップ = 'トップ' // varやconst宣言も同様。
let 同名 = 'トップ'
// 関数スコープ:
function 関数() {
let 外側にない変数 = '関数スコープ'
// 参照
console.log(トップ) // トップ
// 代入(上書き)(const除く)
トップ = '関数スコープ'
// 外側は隠蔽され、それぞれ別々の変数扱い。
let 同名 = '関数スコープ'
}
関数()
console.log(トップ) // 関数スコープ
// 内側とは別の変数。
console.log(同名) // トップ
// 外から関数内は見えないのでエラー
// 外側にない変数 // ReferenceError