fe-interview icon indicating copy to clipboard operation
fe-interview copied to clipboard

var与let、const的区别?

Open habc0807 opened this issue 4 years ago • 1 comments

habc0807 avatar Aug 16 '20 10:08 habc0807

var支持变量提升,但是变量提升会带来变量被覆盖,变量污染的问题,let和const是为了解决变量提升而引入的,两者都支持块级作用域,作用域块内的变量不影响块外面的变量。

在同一段代码中,ES6是如何做到既支持变量提升的特征,又要支持块级作用域的?

编译并创建执行上下文,var声明的变量全部都放到变量环境,let/const声明的变量放到词法环境,在词法作用域的内部维护了一个小形栈,变量进行查找的时候,也是从词法环境中的某个块中查找,查到就直接返回给 js 引擎。查不到就继续在变量环境中查找。

如果在初始化之前使用let变量,就会形成一个暂时性死区。

作用域是变量和函数可访问的范围,作用域控制着变量和函数的可见性和生命周期

块级作用域是通过词法环境的栈结构来实现的,而变量提升是通过变量环境来实现,通过两者结合,JavaScript 引擎也就同时支持了变量提升和块级作用域了。

habc0807 avatar Aug 17 '20 08:08 habc0807