首页 > 解决方案 > 为什么增量器打印 3 即使条件检查小于 3?

问题描述

对于下面的代码输出将打印 3 次“3”,即更新相同的变量 3 次

for(var k=0;k<3;k++){
 setTimeout(()=>{
      console.log(k)
    },1000) 
}

同样,如果我使用 let 而不是 var 1,2,3

for(var k=0;k<3;k++){
 setTimeout(()=>{
      console.log(k)
    },1000) 
}

我知道为什么它打印 0,1,2 因为 i 每次都不一样。我只是想知道为什么它在 var 作为条件的情况下打印 3 是为了检查小于 3?

标签: javascriptecmascript-6

解决方案


该函数setTimeout将在提供的延迟后执行。由于 javascript 基于并发模型和事件循环,因此代码执行不会停止,因此执行会一直持续到提供的延迟。在这种情况下,增加 k。此外,后增量运算符将使用迭代前的值。因此,对于最后一次迭代,k 的值为 3,但由于我们给出了延迟,它每次都会打印 3。


推荐阅读