定时器:设定一个定时器,并且设定等待时间,当到达执行时间,浏览器会把对应的方法执行。
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)
