JavaScript:从JS的执行机制到location对象

一、JS执行机制

(1)JS是单线程

JavaScript语言的一大特点就是单线程,也就是同一时间只能做一件事。因为JavaScript是为了处理页面中的用户交互,以及制作DOM二诞生的。比如我们对某个DOM元素进行添加和删除操作,这个不能同时进行,应该先添加,后删除。

这样也会有问题:如果JS执行时间过长,会造成页面渲染不连贯,导致页面渲染加载阻塞的感觉

为了解决这个问题,利用多喝CPU的计算能力,HTML5提粗Web Worker标准,允许JavaScript脚本创建多个线程,于是就有了同步和异步。

(2)同步和异步

1.同步

前一个任务结束后再执行后一个任务,程序的执行与任务的排列顺序是一致的、同步的。

该怎么理解呢?

就像做饭的同步做法:我们要烧水做饭,等水开了(10分钟之后),再去切菜,炒菜,一步一步来。

2.异步

在执行这个任务的同时,也在执行别的任务。

再来拿做饭打比方:在烧水的同时,我们来切菜,炒菜。

简单以一个案例来体验一下JS的执行过程:

console.log(1);
setTimeout(function () {console.log(3);
}, 1000);
console.log(2);

执行结果是:

由此可以看出,现在的JS可以同时执行任务,也就是可以异步执行 

(3)同步任务

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

(4)异步任务

JS的异步任务是通过回调函数实现的

异步任务有三种类型:

  • 普通事件:如click,resize等
  • 资源加载:如load,error等
  • 定时器:包括setInterval,setTimeout等

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

(5)JS执行机制

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

2.异步任务(回调函数)放入任务队列中

3.一旦执行栈中的同步任务完成,按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行 

案例:来一个练习题试试,像下面这个代码该怎么执行呢?究竟是1 2 3还是1 3 2呢?

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

居然还是1 2 3,,看来这个是一个同步任务,它会形成一个执行栈

但是普通的同步任务只会产生1 2 3的序列,而setTimeout属于异步任务的定时器类型,它会产生一个任务队列

 按照执行机制来看,先执行执行栈中的同步任务,先执行

console.log(1);

遇见了异步任务

setTimeout(fn(), 0);

把异步任务放入任务队列中,不执行,执行完执行栈里的同步任务后再执行,最后的输出就是我们看见的1 2 3

那如果有多个异步任务该怎么执行呢?我们来看下面这段代码

console.log(1);
document.onclick = function () {console.log('click');
}
console.log(2);
setTimeout(function () {console.log(3);
}, 1000);

里面的执行过程为:

其中document.onclick那个只有再鼠标点击后才会放入任务队列,setTimeout这个只有事件到了才会放入任务队列,也就是图中的console.log(3) ,执行完就会清空任务队列

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

二、location对象

(1)location对象

window对象给我们提供了一个location属性用于获取或设置窗体的URL,并且可以用于解析URL。因为这个属性返回的是一个对象,所以我们将这个属性也称为location对象。

 (2)URL

统一资源定位符(Uniform Resource Locator,URL)是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器一个怎么处理它。

URL的一般语法格式为:

protocol://host[:port]/path/[?query]#fragment
http://www.itcast.cn/index.html?name=andy&age=18#link
组成说明
protocol通信协议,常用的http,ftp,maito等
host主机(域名) www.itheima.com
port端口号(可选),省略时使用方案的默认端口,如http的默认端口为80
path路径,由领或多个'.'符号隔开的字符串,一般用来表示主机上的一个目录或文件地址
query参数,以键值对的形式,通过&符号分隔开来
fragment片段,#后面内容,常见于链接、锚点

(3)location对象的属性

location对象属性返回值
location.href获取或者设置整个URL
location.host返回主机(域名) www.itheima.com
location.port返回端口号,如果未写则返回空字符串
location.pathname返回路径
location.search返回参数
location.hash返回片段

敲重点!!!href和search要重点记住

来做一个案例:5秒后跳转页面

手动跳转:

<button>点击</button>
var btn = document.querySelector('button');
btn.addEventListener('click', function () {location.href = 'http://www.itcast.cn';
})

直接输出location.href可以得到该页面的整个URL,赋值可以去往另一个页面

主播主播,手动跳转还是太累了,有没有更强势的跳转方式?

有的有的,有一个自动跳转的方法

先建立一个空的div盒子

<div></div>

然后写JS,采用定时器实现5s后跳转页面

var div = document.querySelector('div');
var timer = 5;
function fn() {div.innerHTML = '您将在' + timer + '秒之后跳转到首页';timer--;
}
fn();
setInterval(function () {if (timer == 0) {location.href = 'http://www.itcast.cn';}else {fn();}
}, 1000)

案例:获取URL参数数据

来练习一下数据在不同页面中的传递

新建一个文件夹,将我们要建立我们这两个页面

然后在login.html中使用表单,来将数据传输到index.html里

<form action="index.html">用户名<input type="text" name="uname"><input type="submit" value="登录">
</form>

 在这个界面里输入123 

在index这里我们就有了123这个信息

 也就是要用?后面的那一串信息

我们可以用location.search得到?uname=123

但是我们不需要?,则我们用substr去掉

var params=location.search.substr(1);

 然后再利用=分割键和值,也就是split('=')

var arr=params.split('=');

再把数据写入div中

var div = document.querySelector('div');
div.innerHTML = arr[1] + '欢迎您';

这样就能把数据传到另一个页面上啦

 (4)location对象的方法

location对象方法返回值
location.assign()跟href语言,可以跳转页面(也称为重定向页面)
location.replace()替换当前页面,因为不记录李四,所以不能后退界面
location.reload()程序加载页面,相当于刷新按钮或者f5,如果参数为true,强制刷新(Ctrl+f5)

1.location.assign()

var btn = document.querySelector('button');
btn.addEventListener('click', function () {location.assign('http://www.itcast.cn');
})

记录浏览历史,可以实现后退功能

2.location.replace()

var btn = document.querySelector('button');
btn.addEventListener('click', function () {location.replace('http://www.itcast.cn');
})

不记录浏览历史,不可以实现后退功能

3.location.reload();

location.reload();

重新加载,也就是刷新,如果参数是true,则强制刷新

(5)navigator对象

navigator对象包含有关浏览器的信息,有很多属性,最常用的是userAgent,该属性可以返回有客户机发送服务器的user—-agent头部的值。

下面前端代码可以判断用户那个中断打开页面,实现跳转

if(navigator.userAgent.match(/phone|pad|pod|iPod|ios|ipad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowserNG|WebOS|Symbian|Windows Phone)/i))) {window.location.href = "";//手机
}
else {window.location.href = "";//电脑
}

(6)history对象

window对象给我们提供了一个history对象,与浏览器历史记录进行交互。该对象包含用户(在浏览器窗口中)访问过的URL。

history对象方法作用
back()可以后退功能
forward()前进功能
go(参数)前进后退功能,如果参数是1,前进一个页面,如果参数是-1,后退一个页面

1.back()

模拟后退功能

var btn = document.querySelector('button');
btn.addEventListener('click', function () {history.back()
})

2.forward()

模拟前进功能

var btn = document.querySelector('button');
btn.addEventListener('click', function () {history.forward()
})

3.go()

模拟前进和后退

前进:

var btn = document.querySelector('button');
btn.addEventListener('click', function () {history.go(1)
})

后退:

var btn = document.querySelector('button');
btn.addEventListener('click', function () {history.go(-1)
})

 history对象一般在实际开发中比较少用,但是会在一下办公系统中见到。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iVX:数字化转型全场景技术革新与生态构建实践

在数字经济蓬勃发展的当下&#xff0c;企业数字化转型需求日益迫切。iVX 凭借其独特的技术架构与创新解决方案&#xff0c;深度渗透工业互联网、元宇宙、智慧城市等领域&#xff0c;成为推动全场景数字化转型的重要力量。本文将重新梳理 iVX 的技术应用与生态价值&#xff0c;以…

生物化学笔记:神经生物学概论05 感受野 视觉中枢 高级视皮层中的信息走向

信息传递中的“击鼓传花” 新特性的突现 功能柱&#xff1a;简化节点 高级视皮层中的信息走向

StarRocks Lakehouse 如何重构大数据架构?

随着数据分析需求的不断演进&#xff0c;企业对数据处理架构的期望也在不断提升。在这一背景下&#xff0c;StarRocks 凭借其高性能的实时分析能力&#xff0c;正引领数据分析进入湖仓一体的新时代。 4 月 18 日&#xff0c;镜舟科技高级技术专家单菁茹做客开源中国直播栏目《…

【SpringBoot】基于mybatisPlus的博客系统

1.实现用户登录 在之前的项目登录中&#xff0c;我使用的是Session传递用户信息实现校验登录 现在学习了Jwt令牌技术后我尝试用Jwt来完成校验工作 Jwt令牌 令牌一词在网络编程一节我就有所耳闻&#xff0c;现在又拾了起来。 这里讲应用&#xff1a;令牌也就用于身份标识&a…

HCIP-security常见名词

缩略语英文全称解释3DESTriple Data Encryption Standard三重数据加密标准AESAdvanced Encryption Standard高级加密标准AHAuthentication Header报文认证头协议CACertification Authority证书颁发中心DESData Encryption Standard数据加密标准DHDiffie-Hellman密钥交换算法DPD…

合并多个Excel文件到一个文件,并保留格式

合并多个Excel文件到一个文件&#xff0c;并保留格式 需求介绍第一步&#xff1a;创建目标文件第二步&#xff1a;创建任务列表第三步&#xff1a;合并文件第四步&#xff1a;处理合并后的文件之调用程序打开并保存一次之前生成的Excel文件第五步&#xff1a;处理合并后的文件之…

TDengine 中的压缩设计

简介 机器设备产生的时序数据量大&#xff0c;直接存储成本非常高&#xff0c;所以需要使用压缩技术&#xff0c;尽可能减小体积。 TDengine 使用了列式存储&#xff0c;结合二级压缩技术&#xff0c;压缩率通常可以达到 20%&#xff0c;特殊情况下更能达到 5 % 以内&#xff…

深度学习涉及的数学与计算机知识总结

深度学习涉及的数学与计算机知识可总结为以下核心模块&#xff0c;结合理论与实践需求分为数学基础和计算机技能两大方向&#xff1a; 一、数学知识 线性代数 核心&#xff1a;矩阵运算&#xff08;乘法、转置、逆矩阵&#xff09;、向量空间、特征值与特征向量、奇异值分解&am…

javascript<——>进阶

一、作用域&#xff1a;变量可以被访问的范围 1.局部作用域 1.1函数作用域 在函数内部声明的变量&#xff0c;在函数内部被访问的&#xff0c;外部无法直接访问。 总结&#xff1a;1、函数内部声明的变量&#xff0c;在函数外部无法直接访问 2、函数的参数也是函数内部的局…

驱动开发硬核特训 · Day 25 (附加篇):从设备树到驱动——深入理解Linux时钟子系统的实战链路

一、前言 在嵌入式Linux开发中&#xff0c;无论是CPU、外设控制器&#xff0c;还是简单的GPIO扩展器&#xff0c;大多数硬件模块都离不开时钟信号的支撑。 时钟子系统&#xff08;Clock Subsystem&#xff09;&#xff0c;作为Linux内核中基础设施的一部分&#xff0c;为设备…

并发设计模式实战系列(7):Thread Local Storage (TLS)

&#x1f31f; 大家好&#xff0c;我是摘星&#xff01; &#x1f31f; 今天为大家带来的是并发设计模式实战系列&#xff0c;第七章Thread Local Storage (TLS)&#xff0c;废话不多说直接开始~ 目录 一、核心原理深度拆解 1. TLS内存模型 2. 关键特性 二、生活化类比&a…

时序数据库 TDengine × Perspective:你需要的可视化“加速器”

你有没有遇到这样的场景&#xff1a;数据已经写进数据库&#xff0c;图表却总是“慢半拍”&#xff1f;或是操作界面太卡&#xff0c;光是一个排序就能让你等到喝完一杯咖啡&#xff1f;当数据量越来越大、响应时间却越来越长&#xff0c;开发者和用户都不禁要问一句——就没有…

前端面试每日三题 - Day 19

这是我为准备前端/全栈开发工程师面试整理的第十一天每日三题练习&#xff0c;涵盖 JavaScript中WeakMap与内存管理的底层机制、Redux Toolkit的事件以及系统设计中的企业级表单引擎构建。通过这三道题&#xff0c;你将对现代前端开发中的关键概念有更深入的理解&#xff0c;并…

Antd Modal Drawer 更改默认项

当项目比较大使用了非常多的 Modal 和 Drawer 要是有需求一次性全部调整就会比较麻烦&#xff0c;目前 Antd 的 ConfigProvider 暂不支持&#xff08;也有可能我没找到&#xff0c;待大佬指证&#xff09;就比如由于默认 Modal Drawer 的遮罩层是可以点击关闭的&#xff0c;但是…

硬件工程师面试常见问题(8)

第三十六问&#xff1a;基尔霍夫定理的内容是什么&#xff1f; 基尔霍夫电流定理&#xff1a; 1. 内容&#xff1a;电路中任意一个节点上&#xff0c;在任意时刻&#xff0c;流入节电的电流之和等于流出节点的电流之和。 2. 表达式&#xff1a;根据上图写出节点电流定律的数学…

Elasticsearch 内存使用指南

作者&#xff1a;来自 Elastic Valentin Crettaz 探索 Elasticsearch 的内存需求以及不同类型的内存统计信息。 Elasticsearch 拥有丰富的新功能&#xff0c;帮助你为你的使用场景构建最佳搜索解决方案。浏览我们的示例笔记本了解更多信息&#xff0c;开始免费云试用&#xff0…

硬件工程师面试常见问题(9)

第四十一问&#xff1a;色环电阻的颜色表示什么&#xff1f; 各环表示的意思&#xff1a; 4色环的&#xff1a;前两位表示有效位&#xff1b;第三环表示倍乘&#xff1b;最后一环表示误差&#xff1b; 5色环的&#xff1a;前三位表示有效位&#xff1b;第四环表示倍乘&#…

PyTorch 深度学习实战(23):多任务强化学习(Multi-Task RL)之扩展

之前的PyTorch 深度学习实战&#xff08;23&#xff09;&#xff1a;多任务强化学习&#xff08;Multi-Task RL)总结扩展运用代码如下&#xff1a; import torch import torch.nn as nn import torch.optim as optim import numpy as np from torch.distributions import Norm…

前端——CSS1

一&#xff0c;概述 CSS&#xff08;Cascading Style Sheets&#xff09;&#xff08;级联样式表&#xff09; css是一种样式表语言&#xff0c;为html标签修饰定义外观&#xff0c;分工不同 涉及&#xff1a;对网页的文字、背景、宽、高、布局进行修饰 分为内嵌样式表&…

赋能航天教育:高校卫星仿真教学实验平台解决方案

​​​​​​ 随着全球航天事业的飞速发展&#xff0c;对高素质航天人才的需求日益增长。如何在高校阶段提前锻炼学生的航天工程实践能力&#xff0c;成为教育界的重要命题。作为领先的通信与网络技术供应商&#xff0c;IPLOOK基于自身在5G核心网、卫星通信及仿真平台领域的深…