前端(九)js介绍(2)

news2025/1/4 11:15:21

js介绍(2)

文章目录

  • js介绍(2)
  • 一、函数
    • 1.1函数的两种形式
    • 1.2函数的作用域
    • 1.3声明与提升
  • 二、bom操作
  • 三、dom操作

一、函数

1.1函数的两种形式

//有参函数
//js中的函数只能返回一个值,如果要返回多个需要放在数组或对象中
function func(a,b){
	return a+b
}
func(1,2)

//匿名函数
(function(a,b){return a+b})(1,2)

//arguments参数
//arguments存放传入的参数,arguments[0]为第一个参数以此类推,arguments.length表示传入的参数个数
(function(a,b){console.log(arguments[0],arguments[1],arguments.length)})(1,2)

1.2函数的作用域

js中变量的查询和python一样,先从局部找,找不到则会取上一层找以此类推直到全局为止。另外函数的作用域在函数定义阶段就已经确定了。

var city = "BeiJing";
function Bar() {
  console.log(city);
}
function f() {
  var city = "ShangHai";
  return Bar;
}
var ret = f();
ret(); 
<<<"BeiJing"

另外如果函数内不使用var直接定义变量,变量会被视为全局变量。

a=1
function f1(){a=100}
f1()
console.log(a)
<<<100

let定义的变量作用域会被限定在{}内。

if(true){let a=10}
console.log(a)
<<<报找不到变量a的错误

另外js中和python一样由闭包函数

var a=[]
for(var i=0;i<5;i++){
	function outter(x){
		function inner(){
			console.log(x)
		}
		return inner
	}
	a.push(outter(i))
}
a.forEach(function(val){val()})
<<<0
<<<1
<<<2
<<<3
<<<4

上面的闭包函数中inner函数的变量x作用域在函数定义阶段就已经确定为outter函数的形参x,而由于inner函数中引用了变量x,因此原本在outter函数运行结束就应该释放的局部变量x会保持下来,这样闭包函数就完成了将外部参数保存至内部函数的功能。

1.3声明与提升

在js中代码是从上往下一次执行的,并且js中的变量的声明会被放到作用域的顶部位置,而函数的定义与声明都会放到作用域的顶部位置。

console.log(e)
var e=11;
console.log(e)
<<<undefined
<<<11

上方代码中var e=11;包含了声明和赋值两部操作,我们可以把这段代码拆为var e;e=11;其中var e;是变量声明会被放到顶部,所有上方的代码可以等价于

var e;
console.log(e)
e=11;
console.log(e)

同样的下方代码中,函数func的定义阶段存在对变量e的赋值,因此变量e为局部变量。而var e=1;中的变量声明部分会被提升到func局部作用域的顶部,因此第一个结果为undefined,第二个结果为1。

var e=99;
function func(){
	console.log(e)
	var e=1;
	console.log(e)
}
func()
<<<undefined
<<<1

函数的定义和声明都会被提升到顶部

func()
function func(){
	console.log(111)
}
func()
<<<111
<<<111

但是以下形式的函数定义应按照变量的规则来看待

console.log(func)
var func=function(){
	console.log(111)
}
console.log(func)
<<<undefined
<<<ƒ (){console.log(111)}

另外如果变量和函数名重复时,函数提升的优先级是高于变量提升的

console.log(f)
function f(){
	console.log(111)
}
var f=10;
console.log(f)
<<<ƒ f(){console.log(111)}
<<<10

二、bom操作

BOM(Browser Object Model)浏览器对象模型,主要操作的是窗口、滚动条、弹窗等一些与浏览器直接相关的功能。下面的图片是bom与dom操作的关系。
在这里插入图片描述

//bom操作中以window开头,但是window可以省略

//location相关
//跳转到某页面
window.location.href="url"
//获取当前页面url
location.href
//重新加载页面
location.reload()

//history相关
//后退一页
history.back()
//前进一页
history.forward()
//刷新
history.go(0)

//navigator相关
//获取Web浏览器全称
navigator.appName
//获取客户端绝大部分信息
navigator.userAgent
//获取浏览器运行所在的操作系统信息
navigator.platform

//screen相关
//获取可用屏幕宽度
screen.availWidth 
//获取可用屏幕高度
screen.availHeight

//弹窗相关
//弹窗
alert(1)
//确认型弹窗,确定返回true,取消返回false,但是兼容性不好
var x=confirm("你确定要这么做吗?")
console.log(x)
//输入型弹窗,兼容性不好
var username=prompt("用户名:")
console.log(username);

//打开页面,_blank表示在新的浏览器页面打开,self(默认)表示当前浏览器页面打开
//close表示关闭页面
var t=window.open("http://www.baidu.com","_blank", "width=400, height=400")
t.close()

//浏览器窗口内部高度
innerHeight
//浏览器窗口内部宽度
innerWidth

//定时器相关
//执行一次的定时器,3000单位是ms
var s1=setTimeout(function(){alert(1)},3000)
//清除定时器
clearTimeout(s1)
//循环执行的定时器,3000单位是ms
var s2=setInterval(function(){alert(1)},3000)
//清除定时器
clearInterval(s2)

三、dom操作

Dom(Document Object Model),操作的是网页的文本内容。

//根据id获取标签,返回标签,常用
document.getElementById()
//根据类名获取标签,返回数组
document.getElementsByClassName()
//根据标签名获取标签,返回数组
document.getElementsByTagName()
//根据属性名获取标签,返回数组
document.getElementsByName()

childNodes:获取所有的子节点,标签+文本
children:获取所有元素子节点,不包含文本
parentNode:获取父标签
previousSibling:获取上一个相邻标签,标签+文本
previousElementSibling:获取上一个相邻标签,不包含文本
nextSibling:获取下一个相邻标签,标签+文本
nextElementSibling:获取下一个相邻标签,不包含文本
firstChild:获取第一个子标签,标签+文本
firstElementChild:获取第一个子标签,不包含文本
lastChild:获取最后一个子标签,标签+文本
lastElementChild:获取最后一个子标签,不包含文本

使用方法:

//获取div标签的最后一个子标签
var s1=document.getElementsByTagName('div')[0].lastChild
console.log(s1)
//创建标签
var s1 = document.createElement('div');
//在末尾插入标签
var s2=document.getElementsByTagName('div')[0].lastElementChild
s2.appendChild(s1)
//在某个标签前插入标签
var s1 = document.createElement('div');
var s2=document.getElementsByTagName('div')[0]
var s3=document.getElementsByTagName('div')[0].lastElementChild
s2.insertBefore(s1,s3)
//删除标签
var s2=document.getElementsByTagName('div')[0]
var s1=document.getElementsByTagName('div')[0].lastElementChild
s2.removeChild(s1)//替换标签
var s2=document.getElementsByTagName('div')[0]
var s1 = document.createElement('div');
var s3=document.getElementsByTagName('div')[0].lastElementChild
s2.replaceChild(s1, s3); 
var s1 = document.getElementById("d1")
//获取文本内容,包括子标签内的文本,返回字符串
s1.innerText
//获取标签,返回字符串
s1.innerHTML
//添加文本,会覆盖原本内容
s1.innerText='111'
//添加标签,会覆盖原本内容
s1.innerHTML='<p>111</p>'

var s1 = document.getElementById("d1");
//设置标签属性
s1.setAttribute("age","18")
//获取标签属性
s1.getAttribute("age")
//删除标签属性
s1.removeAttribute("age")
//部分标签自带的属性可以直接赋值,例如img标签的src,input、select、textarea的value
var s1 = document.getElementsByTagName('img')[0];
s1.src=''
//获取标签值
var s1 = document.getElementsByTagName('input')[0];
s1.value

//class操作
var x=document.getElementById('div1')
//增加标签类
x.classList.add('col1')
//移除标签类
x.classList.remove('col1')
//判断标签是否包含类
x.classList.contains('col1')
//标签有类则删除,无类则添加
x.classList.toggle('col1')
//直接指定标签的css样式,但是css属性需要改为驼峰体
x.style.backgroundColor="red"
x.style.margin=...
x.style.marginTop=...

事件:

onclick:点击触发
ondblclick:双击触发
onfocus:聚焦触发(如鼠标点击输入框以后)
onblur:失焦触发
onchange:内容改变触发(如form表单内容变更时)
onkeydown:键盘按键按下时触发
onkeypress:键盘按键按下并松开以后触发
onkeyup:键盘按键松开时触发
onload:页面或图片完成加载后触发
onmousedown:鼠标按下时触发
onmousemove:鼠标移动时触发
onmouseout:鼠标移开某标签时触发
onmouseover:鼠标移到某标签触发
onselect:文本框中文本被选中时触发
onsubmit:确认按钮被点击时触发,form使用

使用方法:

//方式一
<div id="div1" onclick="change(this);">点我</div>
<script>
  function change(this) {
    this.style.backgroundColor="green";
  }
</script>

//方式二,常用
<div id="div1">点我</div>
<script>
    var s1 = document.getElementById('div1');
    s1.onclick = function() {
        this.style.backgroundColor = 'red';
    }
</script>

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

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

相关文章

国标GB28181-2022视频平台EasyGBS如何获取设备镜像ID?

在安防监控领域&#xff0c;随着技术的发展和标准的统一&#xff0c;国标GB28181-2022成为了视频监控系统互联互通的重要协议。EasyGBS作为一个遵循该国标的平台&#xff0c;为用户提供了强大的视频监控和管理功能。 在EasyGBS平台的使用过程中&#xff0c;设备镜像ID的获取是一…

【ADAS】高级驾驶辅助系统

自动驾驶入门—ADAS&#xff08;Advanced Driving Assistance System&#xff09;高级辅助驾驶系统 一、ADAS的官方介绍 二、信息辅助 1、行车监控类 2、危险预警类 3、驾驶便利类 三、控制辅助 1、紧急应对类 2、驾驶便利类 3、是车道保持类 4、智能灯光类 参考链接&#xff1…

Spring Boot + MinIO 实现分段、断点续传,让文件传输更高效

一、引言 在当今的互联网应用中&#xff0c;文件上传是一个常见的功能需求。然而&#xff0c;传统的文件上传方式在面对大文件或不稳定的网络环境时&#xff0c;可能会出现性能瓶颈和上传失败的问题。 传统文件上传&#xff0c;就像是用一辆小推车搬运大型家具&#xff0c;一…

搭建android开发环境 android studio

1、环境介绍 在进行安卓开发时&#xff0c;需要掌握java&#xff0c;需要安卓SDK&#xff0c;需要一款编辑器&#xff0c;还需要软件的测试环境&#xff08;真机或虚拟机&#xff09;。 早起开发安卓app&#xff0c;使用的是eclipse加安卓SDK&#xff0c;需要自行搭建。 目前开…

开发过程优化·自定义鼠标右键菜单

为了改善日常工作中的开发体验&#xff0c;我希望在某个项目目录下点击鼠标右键的快捷菜单&#xff0c;让程序自动为该项目引入一个内部的工具库文件并挂载到项目中。 实现该功能需要组装一些零碎的电脑应用知识&#xff0c;下面徐徐渐进依次说明&#xff1a; 1、在右键菜单中…

搭建ZooKeeper分布式集群

ZooKeeper分布式集群部署旨在通过多节点协作实现高可用性和容错能力。本次实战以三台服务器&#xff08;master、slave1、slave2&#xff09;为例&#xff0c;详细介绍了从下载安装到配置启动的全过程。首先&#xff0c;下载并解压ZooKeeper安装包至/usr/local目录&#xff0c;…

elasticsearch-java客户端jar包中各模块的应用梳理

最近使用elasticsearch-java客户端实现对elasticsearch服务的Api请求&#xff0c;现对elasticsearch-java客户端jar包中各模块的应用做个梳理。主要是对co.elastic.clients.elasticsearch路径下的各子包的简单说明。使用的版本为&#xff1a;co.elastic.clients:elasticsearch-…

【AIGC】使用Java实现Azure语音服务批量转录功能:完整指南

文章目录 引言技术背景环境准备详细实现1. 基础架构设计2. 实现文件上传功能3. 提交转录任务crul4. 获取转录结果 使用示例结果示例最佳实践与注意事项总结 引言 在当今数字化时代&#xff0c;将音频内容转换为文本的需求越来越普遍。无论是会议记录、视频字幕生成&#xff0c…

InstructGPT:基于人类反馈训练语言模型遵从指令的能力

大家读完觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 大模型进化树&#xff0c;可以看到 InstructGPT 所处的年代和位置。来自 大语言模型&#xff08;LLM&#xff09;综述与实用指南&#xff08;Amazon&#xff0c;2023&#xff09; 目录 摘要 1 引言 …

kafka开机自启失败问题处理

前言&#xff1a;在当今大数据处理领域&#xff0c;Kafka 作为一款高性能、分布式的消息队列系统&#xff0c;发挥着举足轻重的作用。无论是海量数据的实时传输&#xff0c;还是复杂系统间的解耦通信&#xff0c;Kafka 都能轻松应对。然而&#xff0c;在实际部署和运维 Kafka 的…

在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件

在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件 一、RTP流与WAV文件格式二、实现步骤三、伪代码示例四、C语言示例代码五、关键点说明六、总结在Linux操作系统上,从媒体服务器(如Media Server,简称MS)获取RTP(Real-time Transport Protocol)流…

蓝桥杯(Java)(ing)

Java前置知识 输入流&#xff1a; &#xff08;在Java面向对象编程-CSDN博客里面有提过相关知识------IO流&#xff09; // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new…

python钉钉机器人

上代码 #coding:utf-8 import sys import time import hmac import hashlib import base64 import urllib.parse import requeststimestamp str(round(time.time() * 1000)) secret 你的secret secret_enc secret.encode(utf-8) string_to_sign {}\n{}.format(timestamp, …

「Mac畅玩鸿蒙与硬件50」UI互动应用篇27 - 水果掉落小游戏

本篇教程将带你实现一个水果掉落小游戏&#xff0c;掌握基本的动态交互逻辑和鸿蒙组件的使用&#xff0c;进一步了解事件处理与状态管理。 关键词 UI互动应用水果掉落状态管理动态交互游戏开发 一、功能说明 水果掉落小游戏包含以下交互功能&#xff1a; 随机生成水果&#…

用 vue3 实现新年快乐

提前祝福大家新年快乐&#xff0c;今天用一个新年快乐的教程来结束这一年。 看下效果 在这个案例中&#xff0c;我们使用了 vue3 &#xff0c;有一个浮动的新年快乐的字体&#xff0c;然后有一堆从下到上的小粒子&#xff0c;在文字背后有一个模拟烟花绽放的效果。 环境搭建…

QT集成IntelRealSense双目摄像头2,集成OpenGL

上一篇文章写了如何把IntelRealSense摄像头的SDK集成到QT项目&#xff0c;并成功采集数据&#xff0c;在没有用OpenCV的情况下完成色彩数据&#xff0c;以及深度数据的显示。 具体地址&#xff1a;https://blog.csdn.net/qujia121qu/article/details/144734163 本次主要写如何…

【模块一】kubernetes容器编排进阶实战之kubernetes pod Affinity与pod antiaffinity

pod Affinity与pod antiaffinity Pod Affinity与anti-affinity简介&#xff1a; Pod亲和性与反亲和性可以基于已经在node节点上运行的Pod的标签来约束新创建的Pod可以调度到的 目的节点&#xff0c;注意不是基于node上的标签而是使用的已经运行在node上的pod标签匹配。 其规则…

从百度云网盘下载数据到矩池云网盘或者服务器内

本教程教大家如何快速将百度云网盘数据集或者模型代码文件下载到矩池云网盘或者服务器硬盘上。 本教程使用到了一个开源工具 BaiduPCS-Go&#xff0c;官方地址 &#xff1a; https://github.com/qjfoidnh/BaiduPCS-Go 这个工具可以实现“仿 Linux shell 文件处理命令的百度网…

使用maven-mvnd替换maven大大提升编译打包速度

先上结论&#xff01;&#xff01;&#xff01; 多模块清理并打包提升&#xff1a;约3.5倍 多模块不清理打包提升&#xff1a;约5.5倍 单模块提升&#xff1a;约2倍 从计算结果来看&#xff0c;多模块提升的效率更高。在使用mvnd package打包多模块式&#xff0c;可在控制台…

LeetCode - 初级算法 数组(删除排序数组中的重复项)

免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 删除排序数组中的重复项 这篇文章讨论如何从一个非严格递增的数组 nums 中删除重复的元素,使每个元素只出现一次,并返回新数组的长度。因为数组是排序的,只要是相同的肯定是挨着的,所以我们需要遍历所有数组,然…