ほげほげ見聞録

技術メモ、備忘録、使い方はそのうち覚える

JSで気を付けること:巻き上げ

変数宣言の巻き上げ(hoisting)

スコープの中で宣言した変数は、スコープの先頭で宣言されたものとして処理される。
PHPなど、宣言した後から変数を使用できる言語に慣れていると引っ掛かる。

var hoge = "hoge_outer";
hogehoge();
function hogehoge() {
     console.log(hoge); // undefined
     var hoge = "hoge_inner";
     console.log(hoge); // "hoge_inner"
}

 

 JSのスコープ、ブロックはスコープを作らない。
if、forなどの内部でvarで定義された変数はローカル変数ではない。

関数の宣言方法は関数式と関数宣言がある。
関数は変数に代入されたオブジェクトなので巻き上げが発生する。
関数宣言を使うと、宣言とその実装も巻き上げられる。
関数式を使うと、宣言のみ巻き上げられる。