javascript hoisting


Il processo di ‘hoisting’ è ciò che accade al codice jvascript prima di essere eseguito.

Prova ad eseguire il seguente codice e controlla i log (ed esempio con Firebug su Firefox), sono gli stessi!
Se, come me, sei abituato a programmare in java e non hai molta esperienza con js, la cosa può sembrarti strana, poi ho visto che
gli scope delle varibili cambiamo tra questi 2 linguaggi.

var myGlobal = 3;
function dd(myGlobal){
if (myGlobal > 2){
var localToIf = "ciao";
}
}

In java, leggendo il codice sopra considero che la variabile localToIf esista esclusivamente dentro l’if, ma Javascript non definisce gli scope delle variabili in base ai blocchi ma in base alle funzioni.
Il processo seguito dal browser per eseguire il codice javascript è una cosa del tipo:
– parsing del sorgente
– “valutazione” del codice
– inizializzazione del global execution context
– create instanze delle dichiarazioni


var foo = 1;
console.log('foo_1:' + foo);
function bar() {
console.log('foo_2:' + foo);
if (!foo) {
console.log('foo_3:' + foo);
var foo = 10;
console.log('foo_4:' + foo);
}
console.log('foo_5:' + foo);
}

function aa() {
var foo = undefined;
console.log('foo_6:' + foo);
if (!foo) {
console.log('foo_7:' + foo);
foo = 10;
console.log('foo_8:' + foo);
}
console.log('foo_9:' + foo);
}
bar();
aa();

Leave a comment