单线程

js是单线程语言,只能同时做一件事
js引擎和Dom操作共用同一个线程

同步和异步

  • JS是单线程语言,只能同时做一件事
  • 浏览器和Node.js已经支持JS启动进程,如:Web Worker
  • JSDOM渲染共用同一个线程,因为JS可修改DOM结构
    JSDOM只能同时有一个进行)
  • 遇到等待(网络请求,定时任务),不能卡主
  • 需要异步
  • 回调callback函数形式
  • 异步不会阻塞代码执行,
  • 同步会阻塞代码执行

    同步

依次执行,会阻塞代码的执行,
比如:

  1. console.log(1);
  2. alert('阻塞了...');
  3. console.log(2); // 只有当alert消失,才会到这一步

异步

  1. console.log('start');
  2. setTimeout(function () {
  3. console.log('async');
  4. },0 );
  5. while (1) {
  6. }
  7. // 最终只输出1

各自执行,互不影响,不会阻塞代码执行
一般都会以回调的形成存在

异步的代码会依次进入到队列当中,等同步任务执行完成再去队列依次执行

异步的应用

  • 网络请求

ajax图片加载

  • 定时任务

setTimeout

  • 事件处理