星海

JavaScript · 单选题 · 第 11 题

前端与全栈开发面试 · 第 11 题

下面代码的输出是?

for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i));
}
  1. A0 1 2
  2. B2 2 2
  3. Cundefined undefined undefined
  4. D3 3 3

答案

D D. 3 3 3

解析

var 声明的 i 是函数级作用域,三个回调共享同一个 i,等它们执行时循环早已结束,i 已经是 3。把 var 改成 let 后,每次迭代都会创建新的绑定,输出 0 1 2。在 ES6 之前,常用立即执行函数制造闭包来保存每次迭代的值。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。