為什么oDIV不能聲明成全局變量?要在每個函數(shù)里聲明一下才不會報錯。
<script type="text/javascript">
window.onload=function(){
var oDiv=document.getElementById('div1');
oDiv.onmouseover=function(){
startMove(0);
}
oDiv.onmouseout=function(){
startMove(-200);
}
}
var timer=null;
function startMove(Target){
var speed;
var oDiv=document.getElementById('div1');
if(oDiv.offsetLeft>Target){speed=-10}
else{speed=10}
clearInterval(timer);
timer=setInterval(function(){
if(oDiv.offsetLeft==Target){
clearInterval(timer);
}
else{
oDiv.style.left=oDiv.offsetLeft+speed+'px';
}
},30)
}
</script>
來大神講講變量的秘密。
2016-09-09
主要是為了提高程序性能,其實在函數(shù)外聲明也是可以找到,只不過花費的時間比在函數(shù)內(nèi)要長..
2016-11-15
你這樣申明, 其實已經(jīng)算是全局變量了, 不信你可以試試, 函數(shù)申明是可以給它程序 里面的子函數(shù)用的, 子函數(shù)里面不用再重新申請這個變量。
//?如果oDiv放在onload之外聲明,這時候還沒有加載到下面的html標簽,
你這句話是錯誤的, 如果沒有加onload,才是在執(zhí)行script的時候, 這個div還沒有被創(chuàng)建, 所以你獲取不到, 而一旦加了onload, 就是表示你的html加載完成以后, 再執(zhí)行onload里面的內(nèi)容 ,, 所以你理解有誤
2016-09-10
這個問題我想明白了。因為代碼是從上往下被加載的,如果oDiv放在onload之外聲明,這時候還沒有加載到下面的html標簽,這個聲明是無效的。所以寫在頭部的js代碼要取對象必須在onload里面才不會出錯!