理解js的同步操做与异步操做

字面误区:一、js同步操做任务,并不是一块儿操做之意;二、js异步操做任务,也并不是是指在不一样线程里作不一样的事情。javascript

本质理解:首页js的语言执行环境是单线程的,也就是一次只能完成一个任务,多个任务就必须按照时间前后排队,前面完成后才能完成后一个任务。这个是js的常规模式,也就也是同步操做任务。java

弊端:同步操做任务带来的问题是,只要一个任务执行时间过程,后面的任务都会排队等待,拖延整个程序的执行,如:常见的浏览器假死极可能就是js任务执行时间太长致使。浏览器

为了解决同步操做带来的弊端,js语言增长了异步任务的操做模式:当前任务能够携带回一个回调函数(当前任务执行时间过长,把须要提早执行的任务放在回掉中);能够利用setTimeout构建异步任务,让主逻辑优先执行,对于耗时间长的任务能够放在setTimeout中异步执行。因此异步操做任务主要是改变了程序的正常执行操做顺序。异步

以下:ide

<script type="text/javascript">
console.log("1")
setTimeout(function(){
console.log("2")
},0)
setTimeout(function(){
console.log("3")
},0)
setTimeout(function(){
console.log("4")
},0)
console.log("5")函数

</script>线程

执行结果为:队列

1
5
2
3
4事件

那么大体的运行机制以下:
(1)在js主程序(单线程)上的同步任务造成了一个主任务执行栈
(2)主线程以外还存在一个任务队列,这个队列存在一些按时间顺序存放的事件,如鼠标点击、计时触发等,主线程中每出现一个异步任务,任务队列就会增长一个异步任务的事件
(3)通常执行栈中的同步任务执行完毕,系统就会读取任务队列,看看哪些事件是能够执行的,一旦能够执行将进入执行栈开始执行
(4)不断重复以上动做ip

相关文章
相关标签/搜索