This answer ha davvero una bella spiegazione di quello che sta succedendo qui.
Il riepilogo è che Javascript viene elaborato in due fasi, compilazione e quindi esecuzione. Le definizioni delle funzioni si verificano durante la fase di compilazione, quindi all'interno di b
il compilatore vede la definizione function a() {}
e la variabile locale a
viene creata nell'ambito di b
. Successivamente, quando il codice viene eseguito, l'ambito di b
contiene già la variabile locale a
prima che venga eseguito qualsiasi codice, pertanto la riga a = 10;
sta semplicemente assegnando alla variabile locale un nuovo valore. La definizione della funzione è stata già elaborata durante la compilazione in modo che non si verifichi durante l'esecuzione, pertantoemetterà 10
.
fonte
2013-05-29 00:01:44
+1 per aver menzionato 'hoisting' – sabithpocker
Sta definendo' a' come funzione all'interno di 'b' costringendo' a' ad essere locale a 'b', anche senza fare esplicitamente un' var a'. Qual è la magia dietro l'ambito locale implicito? – sabithpocker
+1 buon esempio – John