js语言的一大特点就是单线程,也就是说,同一个时间只能做同一件事情。单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。这样所导致的问题是:如果js执行时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。
同步:前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的 同步的。
异步:在做一件事情的同时还可以去做其他事情。
同步任务: 同步任务都在主线程上执行,形成一个执行线
异步任务: js的异步任务是通过回调函数实现的。
异步任务一般而言有一下三种类型:
1.普通事件 如click,resize等
2.资源加载,如load,error等
3.定时器,包括 setInterval,setTimeout等
异步任务相关回调函数添加到任务队列中(任务队列也称为消息队列)。
js的执行机制
1.先执行执行栈中的同步任务
2.异步任务(回调函数) 放入任务队列中
3.一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务等待结束状态,进入执行栈,开始执行。