關于 聲明變量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() 函數(shù)之外嗎? ? 放在如上代碼在函數(shù)內部聲明會出現(xiàn)bug ?這是什么原因? ?必須得放在函數(shù)外邊聲明嗎?謝謝!
2015-12-24
將timer變量放在了startMove方法里面,相當于每點擊一次按鈕,就會執(zhí)行一次startMove方法,生成了一個閉包,因此創(chuàng)建了一個局部timer,每一個閉包當中的timer并不會共享,所以當?shù)诙位蛞陨险{用startMove時并不會關閉timer。