Javascript闭包
经典面试例子
下面展示一些 经典代码
。
for(var i = 0; i < 5; i++){
setTimeout(function(){
console.log(i++);
},4000);
}
console.log(i);
// 输出结果
5
//等待4s,这里从5开始输出是因为setTimeout延迟了4s,
//但是只延迟一次,等待4s到达时间后,会一次性将任务队列里的 i++ 运行出来
5
6
7
8
9
解析过程
- 首先要全局执行上下文。然后从for开始,for完后再进行log输出
- 最开始输出的i是5,因为setTimeout进行了延迟
- 然后4s到后,此时的i = 5,依次进行 i++
- 为什么是 i++ 是从5开始呢,i++ 的意思是先加后减,所以是从5开始