浅谈var、let 和 const 的区别

ES6 中新增let命令,用来声明变量。它的用法类似于var,但是不存在变量提升,且只在let命令所在的代码块内有效,

const是用了声明只读常量的,一旦声明,常量的值就不能修改

下图表明了它们的区别

声明方式 变量提升  暂时性死区  重复声明  初始值  作用域
var

允许

 不存在  允许  不需要  非块级
let

不允许

 存在  不允许  不需要  块级
const  不允许  存在  不允许  需要  块级

 

 

 

 

 

 

1.变量提升

变量提升,即变量可以在声明之前使用,值为undefined

console.log(a)
var a = 1 //undefined
let a = 1 //报错,Uncaught ReferenceError: a is not defined
const a = 1 //报错,Uncaught ReferenceError: a is not defined

2. 暂时性死区

ES6 中规定,如果代码块内,存在let 或 const,那么这个代码块内声明的变量,从一开始就会形参封闭区域。凡是在声明之前就使用这些变量,就会报错,在语法上,称为"暂时性死区"

var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}

3.重复声明

指在相同的作用域内,重复声明同一个变量

var a = 1;var a = 2;console.log(a)//2
let a = 1;let a = 2;console.log(a)//Identifier 'a' has already been declared
const a = 1;const a = 2;console.log(a)//Identifier 'a' has already been declared
       

4.初始值

const 声明的是一个只读的常量,一旦声明,就必须赋初始值,而且声明之后不允许改变

const PI = 3.1415
PI = 3 // 报错,Uncaught TypeError: Assignment to constant variable.

5.作用域

{
            var a = 1
            let b = 2
            const c = 3
        }
        console.log(a) //1
        console.log(b) //is not defined
        console.log(c) //is not defined

 

posted @ 2022-08-09 15:14  奶包迷了鹿  阅读(52)  评论(0编辑  收藏  举报