1、JS执行机制
JavaScript语言的一大特点就是单线程,即同一个时间只能做一件事。也就意味着,所有任务需要排队执行,这样导致的问题是:如果某项任务执行时间过长,会造成页面的渲染不连贯。
为了解决这个问题,利用CPU的计算能力,HTML5提出了Web Worker标准,允许JavaScript脚本创建多个线程,于是,JS执行机制出现了同步和异步。
同步:多个任务必须顺序执行。
异步:若某一任务执行时间长,可先执行其他任务。
同步与异步的本质区别:流水线上各个流程的执行顺序不同。
同步和异步
同步任务都在主线程上执行,形成一个执行栈。异步任务都是通过回调函数实现的,一般而言,异步任务有以下三种:
- 普通事件:如click、resize等
- 资源加载:如load、error等
- 定时器:setInterval、setTimeout等
异步任务相关回调函数添加到任务(消息)队列中。
JS执行机制
- 先执行执行栈中的同步任务
- 异步任务(回调函数)放入任务队列中进行等待
(注:回调函数只有进行了相应行为或者是到达时间后才放入任务队列,否则只是交给异步处理程序处理)
3. 一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,被读取的异步任务则结束等待状态进入执行栈,开始执行。
JS执行具体流程
事件循环:主线程任务执行完毕后,会查询任务队列,从中取出一个任务推入主线程进行处理,完毕后继续重复该动作。
2、BOM中的常见对象
location对象
window对象提供了一个location属性,用于获取或设置窗体的URL,并可以用于解析URL。因为这个属性返回的是一个对象,所以也称为location对象。
URL(此处暂做了解):统一资源定位符,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该如何处理它。
URL的一般语法格式:
protocol: //host [:port] / path / [?query] #fragment
举例:https://www.bilibili.com/video/BV1k4411w7sV?p=91&spm_id_from=pageDriver
location对象的属性
跳转页面:给location.href重新赋值即可(不激烈浏览历史,不可后退)
获取URL参数案例:
navigator对象
navigator对象包含有关浏览器的信息,最常用的是userAgent,该属性可以返回由客户机发送服务器的user-agent头部的值,判断是由何种设备打开网页。
history对象
history对象与浏览器历史记录进行交互,该对象包含用户(在浏览器窗口中)访问过的URL