ES6新增了let命令,用来声明变量,用法类似于var,但是和var有一定的区别
2.let只在块级作用域内有效
首先来看一个比较简单的例子,请告诉我,他们分别输出什么
1 2 3 4 5 6 7 8 9 10 |
|
两段代码的不同之处就在声明变量i时,一个采用的var,一个采用的let。代码段1在外部打印i时的结果是 10,而代码段2的结果却是 i is not defined。
这是因为let声明的变量只在块级作用域内有效,所以在外部环境无法使用这个变量,而var声明的变量是一个全局变量。
然后再看下面这个经典面试题,告诉我,他们分别输出什么
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
分析代码之前,你要知道setTimeout是一个异步函数,异步函数的执行顺序是当主线程执行完成之后才会执行异步队列里的函数。所以每一次for循环实际上是将与之对应的set