var、let、const三者的区别

809 阅读2分钟

在js中,var、let、const都有声明变量的作用,但是这三者之间是有一定的区别的

var

1. var 声明的变量会进行声明的提升(只提升声明,不提升赋值)

console.log(age);
         var age=20
         
         // 以上代码可以做如下解析:
         var age                 // 声明,没有赋值,值默认是undefined
         console.log(age)        // undefined     因为age已声明未赋值
         var age=20

2. var 声明的变量没有块级作用域的概念(指结构块、循环结构、分支结构等...不是指函数),它会挂载到全局windows

if (1) {
             var age = 20
         }
         console.log(age)      // 20     因为挂载到全局,所以块里面也生效
         console.log(window)

3. var 允许声明同名变量,后面的会将前面覆盖

         var age = 20
         var age = 30
         console.log(age)      // 30

let

1. let 声明的变量不会进行任何的提升,一定要先声明赋值再使用

         console.log(age)     // Cannot access 'age' before initialization         
         let age = 20

2. let 声明的变量有块级作用域,作用域是当前变量所有的结构块{}

有效作用域:从定义这个变量开始到它所在 } 结束

 if (1) {
            console.log(age)      // Cannot access 'age' before initialization
            let age = 20
            console.log(age)
        }
        console.log(age)          // age is not defined

3. let 不能重复声明变量

         let age = 20
         let age = 30
         console.log(age)         // Identifier 'age' has already been declared

暂时性死区

暂时性死区:指的是变量在作用域内已经存在(即已经被 let/const 声明),但仍未被赋值而无法使用,那么在变量被声明之前的瞬间称为暂时性死区

const

1. 使用 const 声明的是常量

常量:指的是是一旦定义完就不能修改的值

2. 使用 const 声明的常量在定义的同时就要赋值,且不能改动

        const PI = 3.14
        PI = 3.16      // 报错  Assignment to constant variable
        console.log(PI)

const 和 let

const 和 let 从限制上来说还是比较近似的,和 let 一样,const 也是只在当前代码块有效,也不能在当前的作用域当中重复声明同一变量,也没有变量提升

总结

  • var 声明的变量作用域是全局,let 和 const 声明的变量作用域是块作用域
  • var 声明的变量会有声明提升,let 和 const 没有,且有暂时性死区
  • var 可以重复声明变量,let 和 const则不行
  • const 和 let 的使用上比较相似,最大区别在于 const 声明的变量不能被修改