let timer = () => {
for(let i = 0; i < 5; i ++) {
setTimeout(() => {
console.log(i)
}, i * 1000)
}
}
timer();
上面的代码将以1000ms的间隔打印0、1、2、3、4
并且如果将let i = 0
更改为var i = 0
,timer()
将以1000ms的间隔五次推入“ 5”。到目前为止一切顺利,我知道let
和var
之间的区别
但是现在我想以1000ms的间隔打印0、1、2、3、4,并且不使用 let
关键字,那我该怎么办?
我想我可以需要使用闭包,但我不知道如何。
编辑:通过不使用,我的意思是使用var
答案 0 :(得分:0)
如果您不能使用let
,则可以始终使用Immediately Invoked Function Expression:
let timer = () => {
for (var i = 0; i < 5; i++) {
(i => {
setTimeout(() => {
console.log(i)
}, i * 1000)
})(i)
}
}
timer();
如果您想使代码与ES5兼容,则还必须将箭头功能转换为普通功能:
var timer = function () {
for (var i = 0; i < 5; i++) {
(function (i) {
setTimeout(function () {
console.log(i);
}, i * 1000);
})(i);
}
}
timer();