我有两个关于for循环的简单代码片段,分别涉及let和var。 第一个代码具有用let声明的变量
for (let i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}
所以它会这样显示o / p
0123456789
但是如果我用这样的var替换let
for (var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}
it will print 10 for ten times.
我知道这与函数级作用域和块级作用域有关,但是想清楚地逐步了解执行过程。
谢谢。
答案 0 :(得分:2)
仅打印9
的原因是在循环完成后执行了回调函数。这意味着i
为9。
您可以:
如果尝试在1秒后打印1-10,则可以循环使用回调函数。喜欢:
setTimeout(function() {
for (var i = 0; i < 10; i++) { //Put the loop inside the setTimeout db function.
console.log(i);
}
}, 1000);
如果您尝试每隔一秒打印一次,则可以将i
作为第三个参数传递给setTimeout
for (var i = 0; i < 10; i++) {
setTimeout(function(o) { //Receive it on variale o
console.log(o);
}, 1000 * i, i); //Pass the i as third parameter
}
文档:setTimeout