javascript setInterval()和Variable Scope

好的,我在这里看了几个问题但标题相同,但仍无法找到问题的解决方案。 我正在研究一个基本的javascript倒计时器,我一直在更新变量的值。

 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; } 

当我将a的值递减-1时, console.log( a )每次应减少1,即

 100 99 98 ...... 

但是console.log( a )总是给100

新手到这里javascript请温柔。 谢谢。

您不应传递timer函数a in参数来访问全局变量a 。 当a传递给timer函数时,使用全局变量的值但是在timer中,参数变量是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; } 

将变量作为参数传递给函数时,可以创建闭包,从而为变量创建新的作用域。

由于变量是全局变量,因此您无需将其传递给:

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; } 

这是关闭的MDN页面 。