varとletの違い javascript

文法とデータ型

varとletの違い、変数の巻き上げについて。

  1. varは(関数スコープ以外の)ブロックスコープがない(関数スコープはある)。letはある。
  2. varは変数の巻き上げ(hoisting)が行われる。letは巻き上げが行われない。
  3. varは同じスコープの中で同じ名前の変数を二重に定義してもよい(エラーは出ない)。letやconstではSyntaxErrorが出る。

スコープが異なればletやconstで同じ名前で変数宣言してもよい。

https://asciidwango.github.io/js-primer/basic/function-scope/(関数スコープとvarの巻き上げ、の部分)

よってletでの変数宣言の前にその変数を参照するとReferenceErrorとなる。

varでの変数宣言の場合巻き上げ(hoisting)が行われるのでエラーは出ずundefinedとなる。


関数の巻き上げについて

https://asciidwango.github.io/js-primer/basic/function-scope/(関数宣言と巻き上げ、の部分)

関数宣言→巻き上げが行われる。つまり関数宣言より前の行でその関数を呼び出してもOK。

関数式→変数宣言部分のみ巻き上げられるので暗黙的にundefinedとなる。よって関数を呼び出せない(Type error)。