校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > js语言和框架 > 闭包相关
题目

下列代码输出什么:

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。

C 0条回复 评论

帖子还没人回复快来抢沙发