谈谈对于变量提升以及作用域的理解?
获取有指向的值,对变量有赋值的动作的时候,不管它所在的位置,一定会强制给它赋值
-
现象
- 无论在任何位置声明的函数、变量都被提升到模块、函数的顶部
-
JS 实现原理:解析 | 执行 qaq
-
解析:检查语法、预编译,代码中即将执行的变量和函数声明调整到全局顶部,并且赋值为 undefined,上下文、arguments、函数参数
-
全局上下文:变量定义,函数声明
-
函数上下文:变量定义,函数声明,this, arguments
-
再去执行阶段,按照代码顺序从上而下逐行运行
-
变量提升存在意义?qaq
-
提高性能 解析引用提升了性能,不需要执行到时重新解析
-
更加灵活,补充定义这样一种玩法
-
指出特殊 case
-
let const 取消了变量提升机制的玩法