问答详情
源自:2-2 JS透明度动画

关于 声明变量var timer =null 的位置问题

function stateMove(iTarget){
			var oDiv=document.getElementById('div1');
			var timer=null;
			var speed=0;
			if(oDiv.offsetLeft>iTarget){
				speed=-10;
			}else{
				speed=10;
			}
			clearInterval(timer);
			timer=setInterval(function(){				
				if(oDiv.offsetLeft==iTarget){
					clearInterval(timer);
				}else{
					oDiv.style.left=oDiv.offsetLeft+speed+'px';
				}
				
			},30);

		}

代码中 声明var timer = null   必须放在stateMove() 函数之外吗?   放在如上代码在函数内部声明会出现bug  这是什么原因?  必须得放在函数外边声明吗?谢谢!


提问者:I百川 2015-04-22 14:56

个回答

  • 精慕门8128098
    2015-12-24 14:53:01

    将timer变量放在了startMove方法里面,相当于每点击一次按钮,就会执行一次startMove方法,生成了一个闭包,因此创建了一个局部timer,每一个闭包当中的timer并不会共享,所以当第二次或以上调用startMove时并不会关闭timer。