JS中全局变量与局部变量怎么设置?

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

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);
console.log(num);
}

我在代码中加入了console.log(num);,你可打开控制台,看看不同情况输出的num值。

其实就是你把num变量放在函数中,是局部变量,每次单击的时候,都会重新赋值0再开始运行下面的代码,所以是可以重复点击。

而放在上面,是全局变量,每次单击后会根据你下面的代码num++而不同了,根据你写的代码,自然就没有效果啦。

追问

console.log(num);是显示的初始值吗?解释一下啊

追答

这是调试用的,显示的是运行到这步,你num的值是多少

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答