// deklaracje var zostaną przeniesione tutaj
var bar, someValue; // ustawione domyślnie na 'undefined'
// deklaracje funkcji zostaną również przeniesione na górę
function test(data) {
// brak blokowego zasięgu spowoduje przeniesienie tutaj
var goo, i, e;
if (false) {
goo = 1;
} else {
goo = 2;
}
for(i = 0; i < 100; i++) {
e = data[i];
}
}
// powoduje błąd TypeError gdyż bar jest nadal 'undefined'
bar();
// przypisania nie zostają zmienione przez 'hoisting'
someValue = 42;
bar = function() {};
test();