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
关键字是为了打破闭包