let
和var一样用来声明变量,支持块级作用域,不允许重复定义,同时不允许在定义前使用。
变量提升:
-全局变量提升:会创建一个变量对象(script)用来收集全局作用域下let定义的变量,但是没有赋值。
-局部变量提升:会将var let定义的变量全部放到当前函数的变量对象中。
-区别:let提升的变量在为赋值之前不允许使用。(摘取自笔记)
上面是let的变量提升的描述。说的是全局变量会被一个script变量对象所收集,它是在变量对象global之后被压入栈中,这个变量对象中保存着全局中被let所定义的对象。
我自己认为let定义的变量在如果是全局变量它并不会发生变量提升,但是如果是是在函数中或者是在块中定义的变量是具有变量提升的。
首先看一下全局变量
我们将断点打在第8行的时候,此时预解析已经完成,var 定义的变量会被变量提升,提前在变量对象中定义,此时我们的第8行还没有执行
我们看到栈结构中只压入了Global变量对象,并没有生成用来收集let定义的变量的script变量对象。也就是说let定义的变量并没