D’accord, j’ai lu plusieurs questions avec le même titre mais je n’ai toujours pas trouvé de solution à mon problème. Je travaille sur un compte à rebours javascript de base et je ne peux pas mettre à jour la valeur de la variable a.
a = 100; var i = setInterval( function(){ timer( a ); }, 1000 ); function timer( a ){ console.log( a ); if( a < 1 ){ console.log( 'Reaching Stop' ); clearInterval( i ); return; } a -= 1; }
Comme je décrémente la valeur de -1, console.log( a )
doit être console.log( a )
à 1 de moins à chaque fois,
100 99 98 ......
Mais console.log( a )
donne toujours 100
débutant à javascript ici s’il vous plaît soyez doux. Merci.
Vous ne devez pas transmettre de paramètre in de la fonction timer
pour accéder à la variable globale a
. Lorsque a
est passé à la fonction timer, la valeur de la variable globale est utilisée, mais dans timer, la variable de paramètre est locale à la fonction timer et sa modification ne modifiera pas la valeur de la variable globale. Cela signifie que votre code a pour nom deux variables dont l’une est globale et l’autre est locale à la fonction de timer et que vous modifiez la valeur de la variable locale de la timer.
a = 100; var i = setInterval( timer, 1000 ); function timer() { console.log( a ); if ( a < 1 ) { console.log( 'Reaching Stop' ); clearInterval( i ); return; } a -= 1; }
Lorsque vous transmettez la variable en tant que paramètre à une fonction, vous créez une fermeture qui crée une nouvelle scope pour la variable.
Comme la variable est globale, vous n’avez pas besoin de la transmettre:
var a = 100; var i = setInterval(timer, 1000); function timer() { console.log(a); if (a < 1) { console.log('Reaching Stop'); clearInterval(i); return; } a -= 1; }
Voici une page MDN sur les fermetures .