setTimeout
setTimeout 简介
setTimeout是浏览器的js处理引擎或者是nodJs内核帮我们实现的一个方法,它的作用是提供一种定时执行的机制,让使用者可以实现在一个特定的时间后执行一段程序的目的。该函数看起来很简单,使用也很简单,但是它的实现及原理并不简单。
setTimeout 用法
我们可以通过setTimeout实现许多意想不到的功能,比如Promise的实现也依赖setTimeout。大多数情况下我们不必去考虑过多的细节,那么setTimeout的使用就比较简单了
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<script>
setTimeout("alert('来啦 老弟!')", 3000);
</script>
</body>
</html>
setTimeout 原理
setTimeout运行机制是:当程序执行到setTimeout函数时,处理器会将代码移出本次执行程序,等到下一次Event Loop时,再检查是否到了指定的时间。如果到了就执行对应的代码。如果不到, 就等到下一轮Event Loop时重新判断。这意味着,setTimeout指定的代码,必须等到本次执行的所有代码都执行完,才会执行。
以下程序和图来源于其他博客
const bar = () => console.log('bar');
const baz = () => console.log('baz');
const foo = () => {
console.log('foo');
setTimeout(bar, 0);
baz();
}
foo();
图中描绘了程序执行时,执行栈中的数据变化,途中红色标出的部分都与任务队列有关,绿色部分表示由于异步程序存在而被打破了原来的顺序。