前端知识总结(八):var,let和const的区别

let和const都能够声明块级作用域,用法和var是类似的,let的特点是不会变量提升,而是被锁在当前块中。

    console.log(a) // a is not defined
    let a = 1

    if(true) {
      let b = 1
      var c = 2
    }
    console.log(b)  // b is not defined
    console.log(c) // 2

    console.log(d) //c is undefined
    var d = 1

let不允许在同一作用域里进行重复声明同一个变量,在同一个作用域里,如果使用var进行声明变量,后面会覆盖前面的 .

const一般用来声明常量,一但声明,其值就不能更改,意味着const一旦声明常量,就必须同时初始化。不能先声明,后初始化,这样会报错

与let一样。const声明的常量也只在块级作用域内有效

与let一样,必须先声明,后使用

与let一样,在同一作用域,const不能重复声明同一常量

const a = 5
a = 20

console.log(a)//Uncaught SyntaxError: Identifier 'a' has already been declared

const虽然是常量,不允许修改默认赋值,但如果定义的是对象Object,那么可以修改对象内部的属性值。

const obj= {
  a: 10
}
obj.a = 100 //没有直接修改obj的值,而是修改obj.a的属性值,这是允许的。
console.log(obj) // {a: 100}

var声明的变量为全局变量(被誉为JS最大设计缺陷之一)

var声明的变量没有块级作用域,既会污染全局变量,也使循环中的异步代码不能如意执行

for(var i = 0; i < 5; i++) {
  setTimeout(() => {
    console.log(i) //5, 5, 5, 5, 5
  }, 0)
}
console.log(i) //5 i跳出循环体污染外部函数

//将var改成let之后
for(let i = 0; i < 5; i++) {
  setTimeout(() => {
    console.log(i) // 0,1,2,3,4
  }, 0)
}
console.log(i)//i is not defined i无法污染外部函数

在实际开发中,我们选择使用var、let还是const,取决于我们的变量后面是否需要修改,通常一些不希望被修改的变量,使用const。当你需要修改声明的变量值时,使用let,var能用的场景都可以使用let替代。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章