Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么incrementor打印3,即使条件检查小于3?_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 为什么incrementor打印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) },

对于以下代码,输出将打印“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)
    },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);