(function(){
function A() {
var aFixe= 2;
var aVar = new Date().getMilliseconds();
function modAVar(){
var aFixe= 10000;
aVar = new Date().getMilliseconds();
}
function B() {
console.log('aFixe = ' + aFixe + "\n" + " aVar = " + aVar);
}
// affichage initial
B();
// modification de aVar dans 2 second
setTimeout(modAVar,2000);
// affichage dans 3 seconde pour attendre l'effet de la modification
setTimeout(B,3000);
}
// lancement du test
A();
})();
Portée des variables on jsbin.com
Pour aller plus loin et comprendre un problème classique
Une closure permet de référencer une variable qui existe dans la fonction parent.
Cependant, elle ne fournit pas la valeur de la variable au moment de sa création, mais fournit la dernière des valeurs dans la fonction parent. La variable de boucle utilisée comme itérateur pose donc le problème lors de l'appel de la deuxième fonction.
JS Bin on jsbin.com