i ist zuerst nur scheinbar global, wird nämlich dann doch noch mit
var
deklariert und deshalb auch nur lokal in der Funktion angelegt, im Unterschied zu j, was wirklich eine globale Variable wird.
Das var wird in der Comilephase interpretiert und die Zuweisungen erst zur Laufzeit, da ist i aber schon lokal deklariert.
Aber
( function(){vari=5; var i; alert(i)} )();
gint auch "
undefined
" aus
Da sind zwei Tippfehler drin, der eine ist entscheidend für deine falsche Schlußfolgerung ;-)
Struppi.