JavaScript单线程及setTimeOut异步的应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DFF1993/article/details/82769191

一、js同步与异步

在JavaScript中任务有两种,一种是同步任务,一种是异步任务。

同步任务:各个任务按照文档定义的顺序一一推入"执行栈"中,当前一个任务执行完毕,才会开始执行下一个任务。

异步任务:各个任务推入"任务队列"中,只有在当前的所有同步任务执行完毕,才会将队列中的任务"出队"执行。(注:这里的异步任务并不一定是按照文档定义的顺序推入队列中)

任务队列(event loop):你可理解为用于存放事件的队列,当执行一个异步任务时,就相当于执行任务的回调函数。

JavaScript引擎是单线程运行的,浏览器无论在什么时候都只有一个线程在运行JavaScript程序。

二、setTimeOut应用

先来看一段代码来理解一下

console.log("1");

setTimeout(function(){
	console.log("2");
},1000);

console.log("3");

setTimeout(function(){
	console.log("4");
},0);

输出结果: 1->3->4->2。

分析

1. 两个console.log()都是同步,按照文档的顺序将它们推入"执行栈"中。

2. 执行栈中的同步任务执行完毕。

3. 将两个异步任务(定时器)按照第二个参数(延迟执行的时间)顺序推入"任务队列"中。

4. 执行异步任务。

总结:

    js是单线程的,而setTimeOut是异步的,在浏览器中,异步操作都是被加入到一个称为“events loop”队列的地方,关键你只要理解浏览器什么时候去运行这个队列里面的代码就能弄懂其中的奥妙了,浏览器只会在所有同步代码执行完成之后采取循环执行这里面的代码的。

猜你喜欢

转载自blog.csdn.net/DFF1993/article/details/82769191