好的,我在这里看了几个问题但标题相同,但仍无法找到解决问题的方法。我正在研究一个基本的javascript倒计时器,我一直在更新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;
}
当我将a
的值递减-1时,console.log( a )
每次应减少1,即
100 99 98 ......
但console.log( a )
始终提供100
新手到这里javascript请温柔。 感谢。
答案 0 :(得分:10)
您不应在a
函数的参数中传递timer
来访问全局变量a
。当a
传递给timer函数时,使用全局变量的值但是在timer中,参数变量是timer函数的本地变量,并且更改它的值不会改变全局变量的值。这意味着您的代码中有两个变量,名称为a
,一个是全局的,另一个是定时器函数的本地变量,您正在更改定时器的局部变量值。
a = 100;
var i = setInterval( timer, 1000 );
function timer() {
console.log( a );
if ( a < 1 ) {
console.log( 'Reaching Stop' );
clearInterval( i );
return;
}
a -= 1;
}
答案 1 :(得分:2)
当您将变量作为参数传递给函数时,您将创建一个闭包,为该变量创建新的范围。
由于变量是全局变量,因此您无需将其传递给:
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 page on closures。