Javascript 有人能解释一下为什么这段代码返回的是6 6 6而不是1 2 3 4 5吗
我试图理解闭包和全局范围之间的区别,我遇到了这个Javascript 有人能解释一下为什么这段代码返回的是6 6 6而不是1 2 3 4 5吗,javascript,closures,Javascript,Closures,我试图理解闭包和全局范围之间的区别,我遇到了这个 for(var i=1;i原因是您使用settimeout和for循环,直到您的超时函数调用了6次loop,并且在i always 6打印中,您需要将您的循环放入settimeout中,以便它每秒钟调用一次 var i=1; setTimeout(函数(){ 对于(i=1;i尝试使用let而不是var 用于(设i=1;iA闭包不复制变量的值。它共享变量本身。因此,由于for循环后只有一个变量i,且i的值为6,并且在i的值变为6后1秒执行第一
for(var i=1;i原因是您使用settimeout和for循环,直到您的超时函数调用了6次loop,并且在i always 6打印中,您需要将您的循环放入settimeout中,以便它每秒钟调用一次
var i=1;
setTimeout(函数(){
对于(i=1;i尝试使用let而不是var
用于(设i=1;iA闭包不复制变量的值。它共享变量本身。因此,由于for循环后只有一个变量i
,且i
的值为6,并且在i
的值变为6后1秒执行第一个超时,因此所有其他超时也将打印6,因为如果要在每个超时中创建i
的多个副本,请使用let
而不是var
-创建let
关键字是为了打破闭包