JavaScript 语言中, 下⾯代码的输出是什么?

for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1);
}
for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1);
}
1020 次浏览
  • A、0 1 2 and 0 1 2
  • B、0 1 2 and 3 3 3
  • C、3 3 3 and 0 1 2
由于 JavaScript 中的事件执⾏机制, setTimeout 函数真正被执⾏时,循环已经⾛完。 由于第⼀个循环中的变量 i 是使⽤ var 关键字声明的,因此该值是全局的。 在循环期间,我 们每次使⽤⼀元运算符 ++ 都会将 i 的值增加 1 。 因此在第⼀个例⼦中,当调⽤ setTimeout 函数时, i 已经被赋值为 3 。 在第⼆个循环中,使⽤ let 关键字声明变量 i :使⽤ let (和 const )关键字声明的变量 是具有块作⽤域的(块是 {} 之间的任何东西)。 在每次迭代期间, i 将被创建为⼀个新 值,并且每个值都会存在于循环内的块级作⽤域。
挑战成功
2年前
挑战失败
2年前
挑战失败
2年前
挑战成功
4年前