let和const的区别及let与var的区别

160 阅读2分钟

(提到的var特指var或function这些老语法,let特指let/const新语法)

let与const的区别

let声明的变量值可以改变 const声明的变量值不可改变

主要原因: let声明的变量指针可以改变,也就是在值创建完成后 (先创建值->创建变量->值指向变量)用let声明的变量即使已经被赋值还是可以修改它指针的指向,改变当前变量代表的值 而const声明的变量,声明的时候必须赋值,指针指向当前值后不可改变,一旦改变就会报错

let与var的区别

var会变量提升

老语法中的var和function在词法解析之后的变量提升阶段(var会只声明,function是既声明也会赋值),而let或const这种新语法不会变量提升,如果在当前作用域用let声明了一个变量,不可以在声明前使用,这样会报错

var可重复声明let不可以

用var可以声明声明过的变量 用let不可以声明声明过的变量,所有用let声明的变量在当前作用域下只能声明一次

let会形成块级作用域

在一个块内可以是if(1===1){}可以是for(let i=0;i<10;i++){}或者只是{} 只要内部有let或者const就会形成一个私有块级作用域

var声明的全局变量会挂载到window上

如果在全局上用var/funtion声明了一个变量,会在变量提升阶段就挂载到window上

let会解决暂时性死区问题

暂时性死区是浏览器的bug,typeof一个没用声明的变量不但不报错还会得到结果是 "undefined",如果在typeof之后用let定义这个变量就会报错,解决浏览器这个bug

//正常情况下=>浏览器的bug
console.log(typeof n)   //undefined
//变量没声明应该报错

//let声明解决暂时性死区问题
console.log(typeof n)
let n   
//词法解析时报错,不可再let声明前使用函数