let 和 const以及var都是js用来生命变量的方法 他们三个的对比是一个高频面试题
var 生命的变量在代码块外也可以获取到 并且存在变量提升 所谓变量提升指的是将变量的声明提升至当前作用域的最顶部
{
console.log(a)
var a = 1
}
// 上面代码的运行顺序本质上是
{
var a; // 一个变量在声明了但未赋值的情况下 他的值是默认值也就是undefined
console.log(a)
a = 1
}
// let声明会将当前代码块转化为一个暂时性的死区 在外部无法获取代码块内声明的变量 let声明的变量没有变量提升 所以不能在声明之前使用
// let 声明的变量如果没有赋值 那么他的默认值就是undefined 可以重新赋值
{
// console.log(a)
// let a = 1
let a;
a = 2
console.log(a)
}
// const声明会将当前代码块转化为一个暂时性的死区 在外部无法获取代码块内声明的变量
// const 声明的变量没有变量提升 所以不能在声明之前使用
// const 声明的是一个常量 一旦声明变量的值就不能改变了
// const 声明变量不能重新赋值 但是如果值是一个引用数据类型 引用数据类型内部的数据可以修改
{
const obj = {
name: 'zhangsan'
}
obj.name = 'lisi'
console.log(obj)
}