<style type="text/css">
body{margin:0;padding:0;}
#div2{width:100px;height:100px;position:absolute;top:500px;left:500px; background:orange;}
</style>
</head>
<body>
<div id='div2'></div>
<script>
var odiv=document.querySelector('#div2');
var arr=[];
var chz=odiv.offsetLeft;
var timer=null;
for(var i=20;i>0;i=i-2){
arr.push(i,-i);
}
arr.push(0);
var num=0;
odiv.onclick=function(){
//var num=0;为什么放在这就可以重复的点击有效;放在上面只能点一次;num不是应该能按作用域链找上去的吗?
timer=setInterval(function(){
odiv.style.left=chz+arr[num]+'px';
num++;
if(num==arr.length){
clearInterval(timer);
}
},30);
}
</script>
</body>
我在代码中加入了console.log(num);,你可打开控制台,看看不同情况输出的num值。
其实就是你把num变量放在函数中,是局部变量,每次单击的时候,都会重新赋值0再开始运行下面的代码,所以是可以重复点击。
而放在上面,是全局变量,每次单击后会根据你下面的代码num++而不同了,根据你写的代码,自然就没有效果啦。
追问console.log(num);是显示的初始值吗?解释一下啊
追答这是调试用的,显示的是运行到这步,你num的值是多少