为什么oDIV不能声明成全局变量?要在每个函数里声明一下才不会报错。

来源:2-1 JS速度动画

风风无

2016-09-09 13:30

<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>

来大神讲讲变量的秘密。

写回答 关注

3回答

  • ZS012
    2016-09-09 14:31:10
    已采纳

    主要是为了提高程序性能,其实在函数外声明也是可以找到,只不过花费的时间比在函数内要长..

  • rainy_li3676598
    2016-11-15 11:24:38

    你这样申明, 其实已经算是全局变量了, 不信你可以试试, 函数申明是可以给它程序 里面的子函数用的, 子函数里面不用再重新申请这个变量。

    // 如果oDiv放在onload之外声明,这时候还没有加载到下面的html标签,

    你这句话是错误的, 如果没有加onload,才是在执行script的时候, 这个div还没有被创建, 所以你获取不到, 而一旦加了onload, 就是表示你的html加载完成以后, 再执行onload里面的内容 ,, 所以你理解有误

  • 风风无
    2016-09-10 14:33:22

    这个问题我想明白了。因为代码是从上往下被加载的,如果oDiv放在onload之外声明,这时候还没有加载到下面的html标签,这个声明是无效的。所以写在头部的js代码要取对象必须在onload里面才不会出错!

JS动画效果

通过本课程JS动画的学习,从简单动画开始,逐步深入各种动画框架封装

113925 学习 · 1443 问题

查看课程

相似问题