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