Quel codice non e` JS corretto: non si possono innestare le funzioni.
Supponendo di chiudere la funzione a() prima di aprire b(), la cosa ancora non e` possibile: per conoscere il valore di una variabile locale di un'altra funzione, devi passargliela in qualche modo (tamite una var globale, tramite il passaggo di un parametro, ...).
E la cosa e` vera indipendentemente dal nome che dai alle variabili (nel tuo esempio usi tre variabili diverse con lo stesso nome e scope diversi), ma sarebbe altrettanto vero se i nomi fossero diversi.
Ma dato che ti stai divertendo con le variabili, ti faccio un altro esempio (valido):
codice:
var i = "ciao pippo";
alert(i);
for(var i=0; i<3; i++) {
alert(i);
}
alert(i);
Dentro il for non e` possibile conoscere cosa contiene la variabile esterna i
Altro esempio:
codice:
var i = 100;
var t = "ciao pippo";
alert(i+" "+t);
for(var i=0; i<3; i++) {
alert(i+" "+t);
var t = "sono dentro";
}
alert(i+" "+t);