月亮邮递员 2022-05-03 12:02:18
变量生命周期:声明(作用域注册一个变量)、初始化(分配内存,初始化为undefined)、赋值
- var:遇到有var的作用域,在任何语句执行前都已经完成了声明和初始化,也就是变量提升而且拿到undefined的原因由来
- function: 声明、初始化、赋值一开始就全部完成,所以函数的变量提升优先级更高
- let:解析器进入一个块级作用域,发现let关键字,变量只是先完成声明,并没有到初始化那一步。此时如果在此作用域提前访问,则报错xx is not defined,这就是暂时性死区的由来。等到解析到有let那一行的时候,才会进入初始化阶段。如果let的那一行是赋值操作,则初始化和赋值同时进行
- const、class都是同let一样的道理
比如解析如下代码步骤:
{ // 没用的第一行 // 没用的第二行 console.log(a) // 如果此时访问a报错 a is not defined let a = 1 }
步骤:
- 发现作用域有let a,先注册个a,仅仅注册
- 没用的第一行
- 没用的第二行
- a is not defined,暂时性死区的表现
- 假设前面那行不报错,a初始化为undefined
- a赋值为1
对比于var,let、const只是解耦了声明和初始化的过程,var是在任何语句执行前都已经完成了声明和初始化,let、const仅仅是在任何语句执行前只完成了声明
- 共 1 页
- 1
第 133 题:用 setTimeout 实现 setInterval,阐述实现的效果与 setInterval 的差异?