let、const、var 的区别
1. 使用 var 声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象
2.使用 let 声明的变量,其作用域为该语句所在的代码块内,不存在变量提升
3.使用 const 声明的是常量,在后面出现的代码中不能再修改该常量的值
var 变量的提升:
js运行时先读取变量和函数 ,变量就会被提取到头部。
var关键字声明的变量,无论实际声明的位置在何处,都会被视为声明在函数的顶部(如果声明不在任意函数内,则视为在全局作用域的顶部)
JavaScript引擎的工作方式是,先预解析代码, 获取所有被声明的变量和函数声明,然后再一行一行地运行,这就使所有变量声明的语句,都会被提升到代码的头部,这就是变量提升

log打印 a 本来是错误的做法但是因为变量的提升所以没有报错 打印的undefined

let 关键字
let关键字就是用来声明变量的
使用let关键字声明的变量具有块级作用域
在一个大括号中 使用let关键字声明的变量才具有块级作用域 var关键字是不具备这个特点的
防止循环变量变成全局变量
使用let关键字声明的变量没有变量提升
使用let关键字声明的变量具有暂时性死区特性
let声明的变量只在所处于的块级有效

let 不存在变量提升

暂时性死区
利用let声明的变量会绑定在这个块级作用域,不会受外界的影响

const 关键字
声明常量,常量就是值(内存地址)不能变化的量
const声明的变量是一个常量
既然是常量不能重新进行赋值,如果是基本数据类型,不能更改值,如果是复杂数据类型,不能更改地址值
声明 const时候必须要给定值
const 具有块级作用域

声明常量时必须赋值

常量赋值后,(基本数据类型)值不能修改

复杂数据类型可以修改值,单是不能修改地址值。

var 面试题

let面试题
