içamento de javascript

declaração var

içado até o topo do escopo, sem atribuição.

var a = 1;
function printA() {
console
.log(a);
var a = 2;
console
.log(a);
}
printA
();
//undefined
//2

declaração de função

içado com atribuição.

foo();
//foo
function foo() {
console
.log('foo');
}

Preste atenção!

enquanto as declarações de função são içadas com sua atribuição, as expressões de função são apenas vars regulares, portanto, içadas sem sua atribuição.

goo();
//undefined is not a function
var goo = function () {
console
.log('goo');
}