代码如下:
for(var i = 1; i <= 5; i++) {
setTimeout(function timer() {
console.log(i);
}, i * 1000);
}
突然一下想不明白为什么是每秒输出一次了??
每一个讲javascript作用域教程都用这个作讲解例程
setTimeout本身是顺序执行的,没有异步这种,所以是1000,2000,3000这种
setTimeout内部的函数是异步的
我倒觉得这道题目的核心是闭包,“为啥每次输出都是6”,而不是“每秒输出一次”。
// 把代码改成这样看能不能理解
setTimeout(function timer() {
console.log(i);
}, 1000);
setTimeout(function timer() {
console.log(i);
}, 2000);
setTimeout(function timer() {
console.log(i);
}, 3000);
setTimeout(function timer() {
console.log(i);
}, 4000);
setTimeout(function timer() {
console.log(i);
}, 5000);
setTimeout(function timer() {
console.log(i);
}, 6000);