![](https://img.haomeiwen.com/i15059390/caf1be8b4f48511a.jpg)
https://fangyinghang.com/let-in-js/
在es5里面,var会提升,但是let会创造一个单独的作用域,而且不会提升。这样可以避免闭包。
let真的不会吗
变量声明分两步,将变量初始化分配一个地址,然后声明。
~var在初始化的时候紧接着就是声明
~let在初始化后,执行到这一行才会声明
!但是所有的初始化都是会提升到当前作用域顶部的
用chrome开发者工具测试
let a = a//erro
let a ='a'//报错 a已经被初始化
![](https://img.haomeiwen.com/i15059390/d84fedc249674b8c.jpg)
《ES6入门》中
![](https://img.haomeiwen.com/i15059390/6975e3616cc3ce87.png)
此处var对 tmp 进行了提升 所以打印undefined 就是false的语句块还是会预编译,但是不会执行
网友评论