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; }
将变量作为参数传递给函数时,可以创建闭包,从而为变量创建新的作用域。
由于变量是全局变量,因此您无需将其传递给:
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页面 。