JavaScript定时器无非就是使用setTimeout和setInterval方法,我们以间隔1秒依次输出1,2,3,4,5为例总结几种不同的写法:
一、使用闭包
一种常用的方法就是在for循环中使用立即执行表达式(IIFE)来创建一个闭包作用域。代码如下:
for (var i = 1; i <= 5; i++) {
(function (i) {
setTimeout(function () {
console.log(i);
}, i * 1000)
}(i))
}
二、借用let实现
在ES6中,定义了关键字let,let可以将变量绑定到所在的任意作用域中,即let为其声明的变量隐式劫持了所在的块作用域;let发挥优势的一个典型的例子就是在for循环中,在for循环头部let声明的的变量,for的每一次循环都会重新声明,并赋予上一轮循环结束的值。所以上边的例子也可以这么写:
for (let i = 1; i <= 5; i++) {
setTimeout(function () {
console.log(i);
}, i * 1000)
}
三、使setInterval实现
由于setInterval函数自身的一些性能问题,实际当中很少用,但是本问题这样的简单例子,用该函数也是一种实现方法,代码如下:
var i = 1;
var Id = setInterval(function () {
if (i == 6) {
clearInterval(Id);
} else {
console.log(i);
i++;
}
}, 1000)