单线程
js是单线程语言,只能同时做一件事
js引擎和Dom操作共用同一个线程
同步和异步
JS
是单线程语言,只能同时做一件事- 浏览器和
Node.js
已经支持JS启动进程,如:Web Worker
JS
和DOM
渲染共用同一个线程,因为JS可修改DOM结构
(JS
和DOM
只能同时有一个进行)- 遇到等待(网络请求,定时任务),不能卡主
- 需要异步
- 回调
callback
函数形式 - 异步不会阻塞代码执行,
- 同步会阻塞代码执行
同步
依次执行,会阻塞代码的执行,
比如:
console.log(1);
alert('阻塞了...');
console.log(2); // 只有当alert消失,才会到这一步
异步
console.log('start');
setTimeout(function () {
console.log('async');
},0 );
while (1) {
}
// 最终只输出1
各自执行,互不影响,不会阻塞代码执行
一般都会以回调的形成存在
异步的代码会依次进入到队列当中,等同步任务执行完成再去队列依次执行
异步的应用
- 网络请求
如ajax
图片加载
- 定时任务
setTimeout
- 事件处理