for中let和var的区别
2020-04-27 本文已影响0人
小雪洁
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
</body>
<script>
//在for中使用let定义循环变量和使用var定义循环变量的区别
for(var i=0;i<3;i++){
//console.log(i);
}
console.log(i);//3
for(let n=0;n<2;n++){
//console.log(n);
}
//console.log(n);//报错,说n没有定义
function csl(x){
console.log(x);//输出两个2
}
console.log("var m=0;m<2;m++")
for(var m=0;m<2;m++){
csl(m);//两次循环分别输出0、1
}
for(let l=0;l<2;l++){
csl(l);////两次循环分别输出0、1
}
console.log('var q=7;q<9;q++');
for(var q=7;q<9;q++){
setTimeout(function(){
console.log(q);//两次循环中都输出9
},1000);
}
for(let p=7;p<9;p++){
setTimeout(function(){
console.log(p);//两次循环中分别输出7、8
},1000);
}
//模拟var的伪块级作用域
for(var o=3;o<5;o++){
(function(o){
setTimeout(function(){
console.log(o);//两次循环中分别输出3和4
},1000)
})(o);
}
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>for中let和var的区别2</title>
</head>
<body>
</body>
<script>
let arr=[];
for(var i=0;i<3;i++){
arr.push(function(){
return i;
});
}
console.log(arr[0]);
console.log(arr[0]());//3 每次循环都把一个函数压到数组里,但是函数在开始执行的时候i已经成3
let brr=[];
for(let n=0;n<3;n++){
brr.push(function(){
return n;
});
}
console.log(brr[0]);
console.log(brr[0]());//0
let crr=[];
for(var c=0;c<3;c++){
(function(c){
crr.push(function(){
return c;
})
})(c);
}
console.log(crr[0]);
console.log(crr[0]());//0
console.log(crr[1]());//1
</script>
</html>