JavaScript · 单选题 · 第 11 题
前端与全栈开发面试 · 第 11 题
下面代码的输出是?
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i));
}- A0 1 2
- B2 2 2
- Cundefined undefined undefined
- D3 3 3
答案
D D. 3 3 3
解析
var 声明的 i 是函数级作用域,三个回调共享同一个 i,等它们执行时循环早已结束,i 已经是 3。把 var 改成 let 后,每次迭代都会创建新的绑定,输出 0 1 2。在 ES6 之前,常用立即执行函数制造闭包来保存每次迭代的值。