var let const 的区别

252 阅读1分钟

区别1-关于var 和 let的区别

  • let 是 ES6的语法,它相比于var, 有了块级作用域的概念的 块级作用域 浅显看就是 {} 被两个大括号给包围了。
  • var在全局声明的变量 是会被挂载在window上的,也就是说,通过 window. 的方式可以访问到该变量,但是通过let声明的全局变量是无法被window给访问的
  • 对于 var 定义的变量 如果没有是后定义,然后先访问是会可以的,但是对于let变量是不可以的
console.log(a); // undefined 
var a = 3;
console.log(b) // 会报错 说你不可以在定义前去访问这个变量
let b; 
  • var 定义的变量是可以被重复声明的,但是let变量不可以

区别2 关于let 和const 的区别

  • const声明的变量是必须要先赋值的,不能只是声明,没有赋值
  • const声明的变量是不可变的,不可以改变其值,但是如果是对象类型,那么可以改变里面的属性等

关于let变量在 setTimeout 里面的使用

在for循环里面使用setTimeout 输出 0 1 2 3 4 而不是输出 4 4 4 4 4

for(var i = 0; i < 5; i++){
    setTimeout(() => {console.log(i)});
}
// 最终会输出 4 4 4 4 4

想得到的效果: 输出 0 1 2 3 4

  • 方法1 使用 let 声明变量
for(let i = 0; i < 5; i++){
   setTimeout(() => {console.log(i)});
}
// 最终会输出 1 2 3 4
  • 方法2 使用立即执行函数
for(var i = 0; i < 5; i++){
    (function(i){
        setTimeout(() => {console.log(i)});
    })(i)
}
  • 方法3 setTimeout带参数
for(var i = 0; i < 5; i++){
    setTimeout((i) => {console.log(i)}, 0, i);
}
// 最终会输出 0 1 2 3 4