`var`による変数宣言は宣言と代入の2つから構成される。 ```js var x = 10; // は var x; // 宣言 x = 10; // 代入 // から構成される ``` このとき、**宣言はもっとも近い関数またはグローバルスコープの先頭**に配置される。これを[[varの巻き上げ]]と呼ぶ。 たとえば以下のコードは ```js console.log(x) console.log("hoge") var x = 10; ``` 下記のように暗黙的に巻き上げられる。 ```js var x; console.log(x) console.log("hoge") x = 10; ``` 先ほどの説明に存在しなかったブロックスコープは[[varの巻き上げ]]で考慮されない。 つまり以下のコードは ```js function hoge() { console.log(x) { console.log("hoge") var x = 10; } } ``` 下記のように暗黙的に巻き上げられる。 ```js function hoge() { var x; console.log(x) { // ブロックスコープの先頭であるここに var x; はこない..!! console.log("hoge") x = 10; } } ```