Javascript 两个相似的for循环输出不同的值
我无法计算以下两个循环的输出。我注意到的唯一区别是前者使用Javascript 两个相似的for循环输出不同的值,javascript,Javascript,我无法计算以下两个循环的输出。我注意到的唯一区别是前者使用var并分配一个全局范围,而后使用const创建一个局部范围 for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1); } for (let i = 0; i < 3; i++) { setTimeout(() => console.log(i), 1); } 首先console.log(i)在控制台中打印的输出是0 1 2。而
var
并分配一个全局范围,而后使用const
创建一个局部范围
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1);
}
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1);
}
首先console.log(i)
在控制台中打印的输出是0 1 2
。而在setTimeout
中包装的一个中,则会发生变化
为什么?
var
被提升到全局范围,因此当调用setTimeout
时,无论调用i
的值是什么,它都会注销,这将是3
,因为for循环在其最后一次迭代中将i
设置为3
。而let
的作用域是for
循环,并在每次迭代中关闭i
的值,因此打印0 1 2
for (var i = 0; i < 3; i++) {
console.log(i);
setTimeout(() => console.log(i), 1);
}