【JavaScript】JavaScript开篇基础(6)

devtools/2024/11/16 15:37:39/

1.❤️❤️前言~🥳🎉🎉🎉

Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。

如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的内容感兴趣,记得关注我👀👀以便不错过每一篇精彩。

当然,如果在阅读中发现任何问题或疑问,我非常欢迎你在评论区jj指正🗨️🗨️。让我们共同努力,一起进步!

加油,一起CHIN UP!💪💪

🔗个人主页:E绵绵的博客
📚所属专栏:

1. JAVA知识点专栏

        深入探索JAVA的核心概念与技术细节

2.JAVA题目练习

        实战演练,巩固JAVA编程技能

3.c语言知识点专栏

        揭示c语言的底层逻辑与高级特性

4.c语言题目练习

        挑战自我,提升c语言编程能力

5.Mysql数据库专栏

        了解Mysql知识点,提升数据库管理能力

6.html5知识点专栏

        学习前端知识,更好的运用它

7. css3知识点专栏

        在学习html5的基础上更加熟练运用前端

8.JavaScript专栏

        在学习html5和css3的基础上使我们的前端使用更高级

📘 持续更新中,敬请期待❤️❤️

2. BOM

BOM(Browser Object Model)浏览器对象模型,他提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window

BOM 是由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。

3.窗口加载事件

window.onload,是窗口(页面)加载事件,当文档内容完全加载完成会触发该事件(包括图像、脚本文件、css文件等),就调用处理函数。

因为js是由上到下依次执行的,一般来说,我们需要按照先写标签,然后将script标签写在标签的下面的方式,但是我们可以通过window.onload来改变script标签的位置,将其放在标签上面,因为这个方法会在页面加载完毕之后才执行,所以执行这个方法的时候,页面中的DOM元素已经全部被渲染了。

<body><script>window.onload = function () {var btn = document.querySelector('button');btn.addEventListener('click',function () {alert('你点我?');})}</script><button>点击</button>
</body>

在以上代码中,我们没有按照之前的标准,将script标签写在button标签下面,但是依旧是可用的。

如果页面中存在多个window.onload,会以最后一个为准(最后一个会覆盖前面的事件)

这是传统事件存在的弊端,为了解决这一问题,我们可以使用监听事件替换window.onload

window.addEventListener('load',function () {}

这样就可以添加多个事件。

如果页面的图片非常多,那么用原来的onload要等很久等图片加载完才能执行该行为,这就会造成错误了。那么推荐使用以下方式。

document.addEventListener('DOMContentLoaded',function () {})

 DOMContentLoaded 事件触发时,仅当html中元素加载完成,不包括css中代码、图片、flash等,这样就很快了。

4.setTimeout 定时器和setInterval() 定时器

window.setTimeout(调用函数,延迟的毫秒数);

  1. window在调用的时候可以省略
  2. 单位是毫秒,省略是0秒,也就是立马执行
  3. 这个调用函数可以直接写函数,还可以写函数名(不需要带括号)

window.setInterval(调用函数,间隔毫秒数)

语法规则上与上述很相似,但与setTimeout()不同的是,setTimeout只会执行一次,但是setInterval会循环执行

5.清除定时器setTimeout()setInterval() 

使用clearTimeout(定时器名称)函数可以清除setTimeout定时器,请看如下代码

<body><button>点我清除定时器</button><script>var btn = document.querySelector('button');var timer1 = setTimeout(function () {alert('我是Jim.kk');},5000);btn.onclick = function () {clearTimeout(timer1);}</script>
</body>

注意在执行settimeout时给定时器名称很重要,因为当要清除它时,我们需要用到名称,执行setinterval时同理。


使用clearInterval(定时器名称)函数可以清除setInterval定时器。这里同理 

6.同步与异步 

JavaScript是单线程,所以同个时间只能处理同个任务,所有任务都需要排队,前一个任务执行完,才能继续执行下一个任务,但是,如果前一个任务的执行时间很长,后一个任务就不得不等着,当用户向后台获取大量的数据时,不得不等到所有数据都获取完毕才能进行下一步操作,用户只能在那里干等着,严重影响用户体验。
因此,JavaScript在设计的时候,就已经考虑到这个问题,主线程可以完全不用等待时间长的任务,可以先挂起处于等待中的任务,先运行排在后面的任务,再回过头执行挂起的时间长的任务。因此,任务就可以分为同步任务和异步任务。


其实同步和异步,
无论如何,做事情的时候都是只有一条流水线(单线程),
同步和异步的差别就在于这条流水线上各个流程的执行顺序不同。

同步任务是指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务

异步任务是指不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程


 注意如果要进入异步任务中,必须为回调函数,一般而言,回调函数有以下三种类型:

1、普通事件,如click、resize等
2、资源加载,如load、error等

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

 <script>setTimeout(function(){console.log(3);},5000)console.log(1);console.log(2);</script>

执行顺序是这样的,先输出1和2等待5秒后输出3.


1. 先执行执行栈中的同步任务
2. 遇到异步任务(回调函数)就放入任务队列中
3. 一旦执行栈中的同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,被读取的异步任务结束等待状态,进入执行栈开始执行。 

总的来说,JavaScript的异步机制包括以下几个步骤:

1. 所有同步任务都在主线程上执行,形成一个执行栈。
2. 主线程之外,还存在一个任务队列,只要异步任务有了结果,就会在任务队列中放置一个事件
3. 一旦执行栈中的所有同步任务执行完毕,系统就会读取任务队列,将可运行的异步任务添加到可执行栈中,然后执行。
4. 主线程不断的重复上面的第三步

7.窗口大小变化事件

window.onresize = functoin(){}
或者
window.addEventListener('resize',function () {} )

 只要文档页面大小发生变化,就会触发里面的处理函数。


<body><button>当宽度小于900px的时候,我就消失啦</button><script>window.addEventListener('resize',function () {// console.log('变化了');// console.log('内高:'+window.innerHeight+'\t内宽' + window.innerWidth);var btn = document.querySelector('button');if ( window.innerWidth < 900 ) {btn.style.display = 'none';} else {btn.style.display = 'block';}})</script>
</body>

以上代码的执行效果:当我们改变浏览器框的大小的时候,当宽度小于900px,这个button按钮就会消失。

这种效果常用在一些页面元素渲染上,比如原本有四个列的某种元素,但是当页面较窄的时候,我们会隐藏其中某个列,以保证页面的正常显示。


注意innerheight指的是文档页面的高度,innerwidth指的是文档页面的宽度。

8.location对象 

window对象给我们提供了一个location属性用于获取或设置窗体的URL.

以下是它属性: 

这里我们只需要记住href和search 。


http://127.0.0.1:8848/testshare/location.html?lang=en&name=zhangsan#test/most

这是一个url地址。

href得到的就是这个全部url,而我们search得到的便是?后面的字符串。

href我们可以利用它去跳转页面,将其他url赋值给它就行。

search我们可以利用它得到参数。


以下是它方法: 

Location.reload() 方法用来刷新当前页面。该方法只有一个参数,当值为 true 时,则强制刷新,强制刷新不会保留缓存。当值为 false 或者未传参时,浏览器刷新后内容依旧不变。 

Location.assign()方法会触发窗口加载并显示指定的URL的内容

document.location.assign('https://www.baidu.com');

Location.replace() 方法以给定的URL来替换当前的资源。 与assign() 方法不同的是,调用 replace() 方法后,之前页面不会保存到会话历史中,这样,用户点击回退按钮时,将不会再跳转回该页面,而assign可以回退到之前页面。

9.history对象

该对象可以控制历史记录。 


back和forward均是前进和后退一格,而go可以很多格,它们前面均是history。


http://www.ppmy.cn/devtools/134466.html

相关文章

VRRP HSRP GLBP 三者区别

1. VRRP&#xff08;Virtual Router Redundancy Protocol&#xff0c;虚拟路由冗余协议&#xff09; 标准协议&#xff1a;VRRP 是一种开放标准协议&#xff08;RFC 5798&#xff09;&#xff0c;因此支持的厂商较多&#xff0c;通常用于多种网络设备中。主备模式&#xff1a;…

常见查找排序算法

算法 作用: 提高代码运行效率 评判算法是否优良 时间复杂度 预测代码执行所需的时间与关键系数的关系 代码执行时间越短越好 空间复杂度 代码执行所需占用的空间,越小越好 常用算法 两数交换 方式1: int a10; int b1; int c a; a b; b c; 方式2: int a10; int b1; aab; b…

操作系统实验:在linux下用c语言模拟进程调度算法程序

文章目录 1、实验内容2、实验结果及分析3、如何在linux下编写并执行c语言程序以及实验源代码gcc -o test test.c1、实验内容 1)用C语言编程实现对N个进程采用某种进程调度算法(如动态优先权调度算法、先来先服务算法、短进程优先算法、时间片轮转调度算法)调度执行的模拟。…

为什么 Vue3 封装 Table 组件丢失 expose 方法呢?

在实际开发中&#xff0c;我们通常会将某些常见组件进行二次封装&#xff0c;以便更好地实现特定的业务需求。然而&#xff0c;在封装 Table 组件时&#xff0c;遇到一个问题&#xff1a;Table 内部暴露的方法&#xff0c;在封装之后的组件获取不到。 代码展示为&#xff1a; …

坚果云·无法连接服务器(无法同步)

cmd&#xff0c;右键选择&#xff1a;以管理员身份打开输出netsh winsock reset&#xff0c;重启计算机即可 &#xff08;这是由于某些代理防火墙导致的&#xff1b;关闭代理&#xff0c;使用代理设置清理器&#xff09; 如果还不行&#xff0c; 换用移动热点、关闭有线网络&a…

鸿蒙动画开发06——打断动画

1、前 言 UI界面除了运行动画之外&#xff0c;还承载着与用户进行实时交互的功能。当用户行为根据意图变化发生改变时&#xff0c;UI界面应做到即时响应。 例如用户在应用启动过程中&#xff0c;上滑退出&#xff0c;那么启动动画应该立即过渡到退出动画&#xff0c;而不应该…

视频流媒体播放器EasyPlayer.js RTSP播放器视频颜色变灰色/渲染发绿的原因分析

EasyPlayer.js RTSP播放器属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;无须安装任何插件&#xff0c;起播快、延迟低、兼容性强&#xff0c;使用非常便捷。 EasyPlayer.js播放器不仅支持H.264与H.265视频编码格式&#xff0…

芯原科技嵌入式面试题及参考答案

Linux 相关驱动怎么写? 在 Linux 中编写驱动主要有以下步骤。 首先,需要了解设备的硬件特性。这包括设备的工作原理、寄存器地址和功能、中断号等信息。例如,对于一个简单的 GPIO 设备,要知道其数据寄存器、方向寄存器的位置以及读写操作的规则。 然后是模块的初始化部分。…