関数スコープの基本

スコープとはその変数の有効範囲のこと。関数の中にある変数の関数スコープ(ローカルスコープ)について、基本ルールは以下のとおり。

  1. 関数の外側からは内側の変数にアクセスできない。
  2. 内側からは外側の変数にアクセスできる。
  3. ただし、同名の変数を宣言すると、外側の変数へもアクセスできない。
// トップレベルで宣言した変数はどの関数からでもアクセスできる。
let トップ = 'トップ' // varやconst宣言も同様。
let 同名 = 'トップ'

// 関数スコープ:
function 関数() {
  let 外側にない変数 = '関数スコープ'
  // 参照
  console.log(トップ) // トップ
  // 代入(上書き)(const除く)
  トップ = '関数スコープ'
  // 外側は隠蔽され、それぞれ別々の変数扱い。
  let 同名 = '関数スコープ'
}
関数()
console.log(トップ) // 関数スコープ
// 内側とは別の変数。
console.log(同名) // トップ

// 外から関数内は見えないのでエラー
// 外側にない変数 // ReferenceError