Что вы должны помнить, так это то, что он анализирует всю функцию и разрешает все объявления переменных перед ее выполнением. Так что ....
function a() {}
действительно становится
var a = function () {}
var a
заставляет его в локальную область, а переменная scope - через всю функцию, поэтому глобальная a переменная по-прежнему 1, потому что вы объявили ее в локальную область, сделав ее функцией.