BOM(笔记)

41 阅读2分钟

JS执行机制

同步

前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。比如做饭的同步做法:烧水煮饭,等水开了(10分钟之后),再去切菜,炒菜

异步

做一件事的同时,可以去处理其他事情。比如做饭的异步做法,烧水的同时,利用这10分钟,去切菜,炒菜

同步任务

同步任务都在主线程上执行,形成一个执行栈

异步任务

js的异步通过回调函数实现的

异步任务的类型:

1、普通事件,如 click、resize 等

2、资源加载,如 load、error 等

3、定时器,包括 setInterval、setTimeout 等

异步任务相关添加到任务队列中(任务队列也称为消息队列)

image.png

js执行机制

1.先执行 执行栈中的同步任务

2.异步任务放到任务队列中

3.同步任务执行完毕,按次序读取异步任务,被读取的异步任务结束等待状态,进入执行栈,开始执行

image.png

由于主线程不断的重复获得任务、执行任务、再获取任务、再执行,所以这种机制被称为事件循环( event loop )

     console.log(1)
    console.log(2)
    setTimeout(function () {
      console.log(3)
    }, 0)
    console.log(4);
    //1243

location对象

location.href

location.search 属性获取地址中携带的参数,符号 ?后面部分

location.hash 属性获取地址中的啥希值,符号 # 后面部分

location.reload

  <a href="#/my">我的</a>
  <a href="#/friend">关注</a>
  <a href="#/download">下载</a>
  <button>刷新</button>
  <script>
    const reload = document.querySelector('button')
    reload.addEventListener('click', function () {
      //相当于按下f5 f5刷新
      // location.reload()
      //ctrl+f5 强制刷新
      location.reload(true)
    })
  </script>

navigator对象

记录了浏览器自身的相关信息

通过userAgent检测浏览器版本及平台

// 检测 userAgent(浏览器信息)
 !(function () {
const userAgent = navigator.userAgent
// 验证是否为Android或iPhone
const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/)
 const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/)
// 如果是Android或iPhone,则跳转至移动站点
if (android || iphone) {
location.href = 'http://m.itcast.cn'
}
})()

history对象

模拟浏览器前进后退,历史记录

back.onclick=function(){
//后退一步
  history.back()
}

image.png