JavaScript 异步编程

81 阅读1分钟

概述

  • JavaScript是单线程模式,因为不能同时对DOM进行操作,比如一个线程修改一个DOM,同时另外一个线程也修改这个DOM,则浏览器会无法分辨到底执行哪个线程;
  • 单线程模式优点:更安全、简单;
  • 单线程模式缺点:如果某块代码有问题或运行时间非常长,会造成阻塞,导致页面性能下降、卡顿
  • JavaScript任务的执行模式:
    • 同步模式
      执行顺序与代码的编写顺序是一致的,执行完后才会往后走
    • 异步模式
      解决单线程的JavaScript语言无法同时处理大量耗时任务
      代码执行顺序混乱,不好理解
      JavaScript是单线程的,但是浏览器(执行JavaScript的内部API)不是单线程的

image.png

  • 回调函数callback--所有异步编程方案的根基 由调用者定义,交给执行者执行的函数 其它实现异步调用的方式:发布订阅、事件监听等
function foo (callback) {
  setTimeout(function () {
    callback()
  }, 3000)
}

foo(function () {
  console.log('这就是一个回调函数')
  console.log('调用者定义这个函数,执行者执行这个函数')
  console.log('其实就是调用者告诉执行者异步任务结束后应该做什么')
})

// 回调地狱,只是示例,不能运行
$.get('/url1', function (data1) {
  $.get('/url2', data1, function (data2) {
    $.get('/url3', data2, function (data3) {
      $.get('/url4', data3, function (data4) {
        $.get('/url5', data4, function (data5) {
          $.get('/url6', data5, function (data6) {
            $.get('/url7', data6, function (data7) {
              // 略微夸张了一点点
            })
          })
        })
      })
    })
  })
})