Javascript 为什么incrementor打印3,即使条件检查小于3?
对于以下代码,输出将打印“3”3次,即更新同一变量3次Javascript 为什么incrementor打印3,即使条件检查小于3?,javascript,ecmascript-6,Javascript,Ecmascript 6,对于以下代码,输出将打印“3”3次,即更新同一变量3次 for(var k=0;k<3;k++){ setTimeout(()=>{ console.log(k) },1000) } for(var k=0;k{ console.log(k) },1000) } 同样,如果我使用let而不是var 1,2,3 for(var k=0;k<3;k++){ setTimeout(()=>{ console.log(k) },
for(var k=0;k<3;k++){
setTimeout(()=>{
console.log(k)
},1000)
}
for(var k=0;k{
console.log(k)
},1000)
}
同样,如果我使用let而不是var 1,2,3
for(var k=0;k<3;k++){
setTimeout(()=>{
console.log(k)
},1000)
}
for(var k=0;k{
console.log(k)
},1000)
}
我知道为什么它打印0,1,2,因为我每次都不一样。我只是想知道,为什么在var的情况下打印3作为检查小于3的条件?上述结果是因为,var全局定义变量,或者局部定义整个函数,而不考虑块范围 让我们为每个循环创建一个变量声明,它是块级声明。所以基本上它在{}内创建了一个作用域 如果要使用var关键字打印,请使用自调用函数:
为了(var k=0;k函数
setTimeout
将在提供的延迟后执行。由于javascript基于并发模型,因此代码执行不会停止,因此执行将持续到提供的延迟。在这种情况下,增加k。此外,增量后操作符将在迭代前使用该值。因此,对于最后一个ite定量k的值是3,但由于我们提供了一个延迟,它每次都会打印3。阅读此和此,您已在两个代码段中粘贴了完全相同的代码。请查看复制目标2和3
setTimeout(()=>{
console.log(k)
},1000)
})(k);