關于 聲明變量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 ?這是什么原因? ?必須得放在函數外邊聲明嗎?謝謝!
2015-12-24
將timer變量放在了startMove方法里面,相當于每點擊一次按鈕,就會執行一次startMove方法,生成了一個閉包,因此創建了一個局部timer,每一個閉包當中的timer并不會共享,所以當第二次或以上調用startMove時并不會關閉timer。