《你不知道的JavaScript》上卷-循环和闭包读书笔记,当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。
##### 代码片段一:
```
for (var i = 1; i <= 5; i++) {
setTimeout(function timer() {
console.log(i);
}, i * 1000);
}
```
代码预期:输出数字1~5,每秒一次。
实际结果:输出5次数字6,每秒一次。
> 每个迭代在运行时都会给自己“捕获”一个 i 的副本,但是5个函数它们都被封闭在一个共享的作用域中,因此实际只有一个 i 。
##### 代码片段二(考虑用IIFE来创建作用域):
```
for (var...