定时器:设定一个定时器,并且设定等待时间,当到达执行时间,浏览器会把对应的方法执行。
1. JS 定时器
JS 中的常用定时器有两种:(浏览器中就两种,NODE 中又多了一种)
setTimeout([function], [interval])
一次setInterval([function], [interval])
多次
[function]:到达时间后执行的方法
[interval]:设置的等待时间,单位 ms
都是 window
下的方法,一般 window
都可以省略
let count = 0;
setTimeout(() => {
count++;
console.log(count);
}, 1000);
//=> 轮循定时器,每间隔一定时长,都会把设定的方法重新执行一次,知道定时器被清除
let count = 0;
setInterval(() => {
count++;
console.log(count);
}, 1000)
2. 清除定时器
clearTimeout / clearInterval
这两种方法中的一个都可以清除用任何方法创建的定时器。
设置定时器会有一个返回值,这个值是一个数字,属于定时器的编号,代表当前的是第几个定时器(不管是基于哪个方法创建的定时器,这个编号都会进行累加)
clearTimeout([序号]) / clearInterval([序号])
,根据序号清除浏览器中的定时器,一般使用变量来接收那个序号,清除定时器的时候,都是传入这个变量
let timer = setInterval(function() {
}, 1000);
timer; //=> 1
3. 执行顺序
题目一:
console.log(1);
var timer1 = window.setTimeout(function () {
console.log(2)
},500);
console.log(3);
var tiemr2 = window.setTimeout(function () {
console.log(4);
var timer3 = setTimeout(function () {
console.log(6)
},200)
},200);
for(var i = 0; i < 900000000; i++){
//时间大概是 1500毫秒
};
console.log(5);
题目二:
console.log(1);
var timer1 = window.setTimeout(function () {
console.log(2)
},500);
console.log(3);
for(var i = 0; i < 900000000; i++){
//时间大概是 1500毫秒
};
var tiemr2 = window.setTimeout(function () {
console.log(4);
},200);
console.log(5);
题目三:
/*
* 主任务队列先执行,依次输出 1 3,执行for,for循环完毕后 再输出 5;这时主任务队列执行完毕,等待任务队列中的代码开始执行,
* */
console.log(1);
var timer1 = window.setTimeout(function () {
console.log(2)
},500);
console.log(3);
for(var i = 0; i < 900000000; i++){
//时间大概是 1500毫秒
}
var tiemr2 = window.setTimeout(function () {
console.log(4);
},200);
for(var i = 0; i < 900000000; i++){
//时间大概是 1500毫秒
}
console.log(5);
console.log(1);
setTimeout(function () {
console.log(2)
},200);
while (true){
}
console.log(1);
setTimeout(function () {
console.log(2)
},0);
console.log(3)
/*
* 定时器 有自己的默认最小时间,即使手写成0,也不是同步执行;也是个异步执行;
* 清除定时器,我们可以混着用;clearInterval 也能清除 timeout
* */
var timer1 = window.setTimeout(function () {
console.log(12)
},4000);
clearInterval(timer1)