var 和 let 的区别
// setTimeout 是个异步函数,所以会先把循环全部执行完毕,这时候 i 就是 5 了,所以会输出一堆 5
for(var index = 0;index < 5;index++) {
setTimeout(function() {
console.log(index,'000000'); // 第三个触发 5个5
},3000);
}
console.log(index,'-----') // 第一个触发 一个5 // var 是函数作用域,在for循环以外也能访问, 有变量提升特性, 允许重复声明相同的变量,后者会覆盖前者
for (let ind = 1; ind < 5 ; ind++) {
setTimeout(function timer() {
console.log(ind,'2222222') // 第四个触发 1,2,3,4
}, 4000)
}
console.log(ind,'3333') // 第二个触发 报错 ind is not defined // let 是块级作用域,只可在 for 循环内 访问,for循环以外不可 ,不能重复声明相同的变量
总结:
var
1, var 是函数作用域,在for循环以外也能访问;
2,有变量提升特性;
3,允许重复声明相同的变量,后者会覆盖前者
let
1,let 是块级作用域,只可在 for 循环内 访问,for循环以外不可;
2,不能重复声明相同的变量