基础知识
1、js是单线程运行,同一时间只能做一件事情,这是因为js是浏览器脚本语言,用途是与用户互动进行DOM操作,单线程运行可以避免同时操作同一个DOM的矛盾问题,但同样会导致需要花费更多的运行时间
2、JS将任务分为同步任务与异步任务两类
- 同步任务:在主线程上排队进行的,按顺序执行
- 异步任务:不进入主线程,而进入事件列表执行,异步事件完成有结果后把结果回调函数放入“任务
队列”(taskqueue),只有“任务队列”通知主线程某个异步任务可以执行了,该任务才会进入主线程执行
常见异步任务:
- 普通事件,如click、resize等
- 资源加载,如load、error等
- 定时器,包括setInterval、setTimeout等
JS运行机制
执行机制:
- 先执行主线程执行栈中的同步任务
- 遇到异步任务,将异步任务放入任务队列中等待
- 一旦执行完主栈中的同步任务,系统会按次序执行任务队列中的异步任务
- 主线程会不断获取任务队列中的任务、执行任务、再获取、再执行任务
主线程遇到的异步任务&