javascript setInterval () et Variable Scope

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:

http://jsfiddle.net/FBVTT/

 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 .