js同步异步,任务队列
单线程 浏览器是多线程运行的,它给js分配一个线程;js就是单线程运行的【一次只干一件事】 所谓单线程,就是只一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,在执行后面一个任务,以次类推。 js执行分为同步和异步,其中异步来自于浏览器提供的异步队列,在浏览器中分为两个任务队列,一个是主任务队列【同步编程】,一个是等待任务队列【异步编程】 了解js的异步我们应该先了解下js的运行环境=>浏览器 一个浏览器通常由一下几个常住的线程 渲染引擎线程:顾名思义,该线程负责页面的渲染 js引擎线程:负责js解析和执行 定时触发器线程:处理定时事件,比如 setTimeout , setInterval 事件触发线程:处理DOM事件 异步http请求线程:处理http请求 注意:渲染线程和js引擎线程是不能同时进行的。渲染线程在执行任务的时候,js引擎线程会被挂起。因为js可以操作DOM,若在渲染中js处理了DOM,浏览器可能就不知所措了 虽然JavaScript是单线程的,可是浏览器内部不是单线程的。一些I/O操作、定时器的计时和事件监听(click, keydown...)等都是由浏览器提供的其他线程来完成的。 Javascript语言将任务的执行模式分成两种:同步(Synchronous)和异步(Asynchronous)。 "同步模式"就是上一段的模式