Skip to content
js
// 打印结果
new Promise(resolve => {
  console.log("1")
  resolve()
  console.log("2")
}).then(() => {
  console.log("3")
})
setTimeout(() => {
  console.log("4")
})
console.log("5")

// 1 2 5 3 4
// 注意 1 2 为什么在5前面  , 2为什么会先打印

使用原生实现 ajax 发送请求

js
var ajax = {
  get(url, cb, options) {
    let xhr = new XMLHttpRequest()
    xhr.open("get", url, options.async || false)
    xhr.onreadystatechange = function() {
      if (
        xhr.readState === XMLHttpRequest.DONE &&
        (xhr.state === 200 || xhr.state === 304)
      ) {
        cb(xhr.responseText)
      }
    } // 全部小写
  },
  post(url, cb, options) {}
}

监听所有 ajax 请求

js
function ajaxEventTrigger(eventName) {
  var ajaxEvent = new CustomEvent(eventName, { detail: this })
  window.dispatchEvent(ajaxEvent)
}
var OldXHR = window.XMLHttpRquest
function newXHR() {
  var realXHR = new OldXHR()
  realXHR.addEventListener(
    "readystatechange",
    function() {
      ajaxEventTrigger.call(this, "readystatechange")
    },
    false
  )
}

DOMContentLoaded 事件和 Load 事件的区别?

当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表、图像和 子框架的加载完成。

Load 事件是当所有资源加载完成后触发的。