首先,js 是单线程的,是同步代码,需要一行一行执行,且一次只能执行一个任务,这个任务做完了才能做下一个任务。
js 为了实现一个伪异步操作,设计了队列机制,模拟多线程,进行单线程的异步操作。
异步定时器机制
- setTimeout(要执行的代码, 时间) 表示时间到达后执行代码,只会执行一遍,叫做延时定时器
- setInterval(要执行的代码, 时间) 表示间隔时间执行代码,会一直执行,叫做间隔定时器(浏览器最快间隔 16ms)
异步机制
异步机制就是浏览器在执行 js 代码的时候,一行一行从上往下执行,当遇到异步任务的时候,把这个异步任务放到队列里,然后继续往下执行,等所有的同步任务执行完毕之后,再去队列里找是否有异步任务,如果有,再去执行异步任务。
定时器的返回值
- clearTimeout(要关闭的定时器的返回值)
- clearInterval(要关闭的定时器的返回值)
定时器的返回值是一个 number 类型的数字,表示页面中是第几个定时器。
它的作用就是关闭定时器,不分定时器的种类,只要返回值是正确的,两种定时器都可以被关闭。
const timer = setTimeout(() => {
console.log('timeout')
}, 1000)
clearInterval(timer) // 即使是 setTimeout 设置的定时器,用 clearInterval 依然可以清除定时器