
文章链接
js语言和框架-JavaScript语言-闭包相关
面5笔5下列代码输出什么:
for (var i = 0; i < 3; i++) {
setTimeout(function log() {
console.log(i); // => ?
}, 1000);
}
【解析】
输出:3, 3, 3。
代码分为两个阶段执行。
阶段1
for() 重复 3 次。在每次循环都会创建一个新函数 log(),该函数将捕获变量 i。 setTimout() 安排log() 在 1000 毫秒后执行。当 for() 循环完成时,变量 i 的值为 3。
阶段2
第二阶段发生在 1000ms 之后:setTimeout() 执行预定的 log() 函数。 log() 读取变量 i 当前的值 3,并输出 3所以输出 3, 3, 3。