五、函数封装及调用、参数及返回值、作用域、匿名函数、立即执行函数

1. 函数基本使用

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {margin: 0;padding: 0;}span {display: inline-block;width: 70px;border: 1px solid lightcoral;padding-left: 5px;}</style>
</head><body><!-- 函数: 是可以被重复使用的代码块作用:把具有相同或相似逻辑的代码“包裹”起来,有利于代码复用--><!-- alert(),parseInt()都是函数的调用 --><script>/* for (let j = 1; j < 10; j++) {for (let i = 1; i <= j; i++) {document.write(<span>${i}*${j}=${i * j}</span>)}document.write('<br>') //换行标签} */// 封装九九乘法表function jiujiu() {let strI = ''for (let i = 1; i <= 9; i++) {let strJ = ''for (let j = 1; j <= i; j++) {strJ += `<span>${j}×${i}=${j * i}</span>`}strI += `<p>${strJ}</p>`}document.write(strI)}// 调用函数jiujiu()jiujiu()</script>
</body></html>

2. 函数参数及返回值

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>// 声明函数时小括号里的叫形参 → 接收数据用function sum(a, b) {// 想要把函数内部的计算结果拿到函数外面使用,就需要返回值// 返回值 返回的位置是函数调用的位置// return退出当前函数 下方代码不执行// 函数可以没有 return,这种情况函数默认返回值为 undefinedreturn a + b}// 调用函数时小括号里的叫实参 → 真实数据// 若函数无返回值,输出函数调用得到的结果为undefinedconsole.log(sum(1, 2))</script>
</body></html>

3. 参数注意事项

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>function fn(stuID, name, age) {console.log(stuID, name, age)/* console.log(typeof stuID)console.log(typeof name)console.log(typeof age)console.log('----------') */}fn(1, 'Tom', 18) // 1 'Tom' 18// 传入数据顺序错误,不报错fn('Tom', 1, 18) // Tom 1 18// 开发中尽量形参和实参个数保持统一// 如果形参过多 会自动填上undefinedfn(1, 'Tom') // 1 'Tom' undefined// 如果实参过多 那么多余的实参会被忽略fn(1, 'Tom', 18, 80) // 1 'Tom' 18</script>
</body></html>

4. 逻辑中断

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>// || 或 一真则真,左边true右边中断function sum(x, y) {// console.log((x || 0) + (y || 0))x = x || 0y = y || 0console.log(x + y)}sum() // 0sum(1) // 1sum(2, 2) // 4</script>
</body></html>

5. 默认参数

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>// 计算100+用户输入的数字// 默认值:只会在缺少实参传递或者实参是undefined才会被执行// 函数定义时,默认参数放到必须传参的形参后边function sum(x, y = 0) {console.log(x + y)}sum(100) // 100sum(100, 20) // 120</script>
</body></html>

6. 数组求和

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>// 函数封装-数组求和function arrSum(arr) {let sum = 0for (let i = 0; i < arr.length; i++) {sum += arr[i]}return sum}// console.log(arrSum([1, 2, 3, 4, 5])) // 15// 用户输入的数字做累加let arr = []for (i = 1; ; i++) {let num = +prompt(`请输入数字${i}输入666则退出输入`)if (num === 666) {break} else {arr.push(num)}}console.log(arrSum(arr))</script>
</body></html>

7. 任意数组最大最小值

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><!-- <script>//封装函数,求任意数组的最大值function getMax(arr) {let max = arr[0]for (let i = 1; i < arr.length; i++) {if (max < arr[i]) {max = arr[i]}}console.log(max)}getMax([1, 23, 34, 6, 7, 8])</script> --><!-- debugger通过代码打断点,看完执行流程需要手动注释代码--><!-- 1. 封装函数,求任意数组中的最大值并返回这个最大值2. 封装函数,求任意数组中的最小值并返回这个最小值--><script>// 最大值// arrMax(arr)中的arr为形参 使得这个函数的灵活性更高function arrMax(arr) {let max = arr[0]for (let i = 1; i < arr.length; i++) {max = max > arr[i] ? max : arr[i]}return max}console.log(arrMax([1, 2, 5, 8, 12, 35, 34]))// 最小值function arrMin(arr) {let min = arr[0]for (let i = 1; i < arr.length; i++) {min = min < arr[i] ? min : arr[i]}return min}console.log(arrMin([1, 2, 5, 8, 12, 35, 34]))</script>
</body></html>

8. 判断数组是否存在某个元素 some

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><!-- 封装函数,判断数组是否存在某个元素,如果有则返回true,否则返回false --><!-- ①:函数封装 some,传递两个参数:元素和数组②:可以设置一个初始变量 flag 为 false③:如果能找到,则修改 flag 值为 true,则中断循环,找不到则不修改 flag④:返回 flag--><script>function some(arr, num) {let flag = falsefor (let i = 0; i < arr.length; i++) {if (arr[i] === num) {flag = truebreak}}return flag}console.log(some([1, 2, 4, 7, 24, 47, 56], 100))console.log(some([1, 2, 4, 7, 24, 47, 56, 100], 100))</script>
</body></html>

9. 查找元素在数组中的索引 findIndex

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><!-- 封装函数,查找元素在数组中的索引l。如果找到该元素(第一个元素即可),则返回该元素的索引号,找不到该元素则返回-1思路:①:函数封装findlndex,传递两个参数:元素和数组②:可以设置一个初始变量 index 为-1③:如果能找到,则修改index值为当前索引号,则中断循环,找不到则不修改index④:返回index--><script>let names = ['小红', '小明', '大强']function findIndex(e1, arr = []) {let index = -1for (let i = 0; i < arr.length; i++) {if (arr[i] === e1) {index = ibreak}}return index}console.log(findIndex('小明', names))</script>
</body></html>

10. 作用域

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><!-- 作用域:变量或者值在代码中可用性的范围 --><!-- 作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。 --><!-- 1. 全局作用域 script 标签或者js文件 → 全局变量2. 局部作用域 函数作用域和块级作用域{} → 局部变量块级作用域{}(let const)--><!-- 注意:函数内部不声明直接赋值的变量当全局变量,不提倡函数内部的形参可以当做局部变量看--><script>let num = 10console.log('函数外', num)function fn() {// 先使用后调用 报错console.log('函数内', num)let num = 100}fn()// 作用域链(就近原则)/*在函数被执行时,会优先查找当前函数作用域中查找变量如果当前作用域查找不到则会逐级向上查找父级作用域直到全局作用域都找不到则提示错误,这个变量没有被定义过*/</script>
</body></html>

11. 匿名函数

11.1 函数表达式

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><!-- 有名函数 → 具名函数 --><!-- 匿名函数 function(){}两种使用方式:函数表达式、立即执行函数   --><script>/* 函数表达式:将匿名函数赋值给一个变量,并且通过变量名称进行调用函数表达式必须先定义,后使用*/let fn = function () {console.log('匿名函数')}fn()</script>
</body></html>

11.2 立即执行函数

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><!-- 立即执行函数,避免全局变量之间的污染注意:多个立即执行函数要用 ; 隔开,要不然会报错立即执行函数可以传参,立即执行函数可以添加函数名--><!-- JS写分号代表结束 --><script>// 1. (匿名函数)()(function () {console.log('(匿名函数)()')})();// 2. (匿名函数())(function () {console.log('(匿名函数())')}());</script>
</body></html>

12. 案例-手风琴

重要代码第85行

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}.container {display: flex;justify-content: space-around;flex-direction: column;align-items: center;height: 100vh;padding: 0 20px;}.one {width: 760px;height: 260px;border: 1px solid #000;}.two {width: 640px;height: 260px;border: 1px solid #000;}.box {display: flex;overflow: hidden;height: 260px;}.box>div {width: 120px;border: 1px solid #fff;transition: all 0.5s;}.box>div:hover {width: 400px;}</style>
</head><body><div class="container"><div class="one"><!-- <div class="box"><div><img src="./images/1.jpg" alt=""></div><div><img src="./images/2.jpg" alt=""></div><div><img src="./images/3.jpg" alt=""></div><div><img src="./images/4.jpg" alt=""></div><div><img src="./images/5.jpg" alt=""></div><div><img src="./images/6.jpg" alt=""></div><div><img src="./images/7.jpg" alt=""></div></div> --></div><div class="two"></div></div><script>let arr = ['./images/1.jpg','./images/2.jpg','./images/3.jpg','./images/4.jpg',]let arr2 = ['./images/5.jpg','./images/6.jpg','./images/7.jpg',]function getAccordion(array) {let str = ''for (let i = 0; i < array.length; i++) {str += `<div><img src="${array[i]}" alt=""></div>`}return `<div class="box">${str}</div>`}document.querySelector('.one').innerHTML = getAccordion(arr)document.querySelector('.two').innerHTML = getAccordion(arr2)</script>
</body></html>

13. 作业

13.1 封装 everyLessThan 函数

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><!-- 用于检测数组所有元素是否都满足小于某个数值--><script>// 1. everyLessThan 函数声明function everyLessThan(arr = [], num) {// 补充代码let elt = truefor (let i = 0; i < arr.length; i++) {if (arr[i] >= num) {elt = falsebreak}}return elt}// 2. everyLessThan 函数的调用console.log(everyLessThan([10, 20, 30], 25)) // falseconsole.log(everyLessThan([1, 2, 3], 5)) // true</script>
</body></html>

13.2 封装求和或平均值函数

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><!-- 函数可以传递 2 个参数,比如 sumOrAvage(arr, true)参数一: 接受实参传递过来的数组参数二:  布尔类型如果是true或者不传递参数 是求和操作如果传递过来的参数是 false 则是求平均值sumOrAvage 函数内,将计算的结果进行返回--><script>function sumOrAvage(arr = [], isSum) {let sum = 0for (let i = 0; i < arr.length; i++) {sum += arr[i]}if (isSum !== false) {return sum} else {return sum / arr.length}}// 第二个参数布尔值true,表示求和console.log(sumOrAvage([1, 2, 3], true)) // 6// 第二个参数不传,也是默认求和console.log(sumOrAvage([1, 2, 3])) // 6// 第二个参数布尔值false,表示求平均值console.log(sumOrAvage([1, 2, 3], false)) // 2</script>
</body></html>

13.3 待办任务-二次开发题

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="./css/index.css">
</head><body><div class="main"><h3>待办任务</h3><!-- 新增任务按钮 --><a href="javascript:;" onclick="add()" class="icon">+</a><ul><!-- <li><p>xxxxxx</p><a class="close" href="javascript:;" onclick="del()">×</a></li> --></ul></div><script>let arr = ['学习javascript', '学习Vue', '学习React']// 新增功能function add() {arr.push(prompt('请输入你的待办任务'))fn()}// 删除功能function del(index) {arr.splice(index, 1)// console.log(index)// console.log(arr)fn()}// 渲染function fn() {let str = ''for (let i = 0; i < arr.length; i++) {str += `<li><p>${arr[i]}</p><a class="close" href="javascript:;" onclick="del(${i})">×</a></li>`}document.querySelector('.main ul').innerHTML = str}fn()</script>
</body></html>

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

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

相关文章

数据分析-48-时间序列变点检测之在线实时数据的CPD

文章目录 1 时间序列结构1.1 变化点的定义1.2 结构变化的类型1.2.1 水平变化1.2.2 方差变化1.3 变点检测1.3.1 离线数据检测方法1.3.2 实时数据检测方法2 模拟数据2.1 模拟恒定方差数据2.2 模拟变化方差数据3 实时数据CPD3.1 SDAR学习算法3.2 Changefinder模块3.3 恒定方差CPD3…

第八节 如何结合AAA实现用户远程登录-路由基础

关于调试设备的登录方式&#xff0c;一共有三种&#xff1a; 第一个&#xff1a;console&#xff1a;需要工程师在现场&#xff0c;进行登录&#xff0c;设备开局的时候使用 第二个&#xff1a;telnet ssh&#xff1a;基于网络互通的前提下进行登录的&#xff0c;远程登录 第三…

【Conda】Windows下conda的安装并在终端运行

下载 在官网下载 https://www.anaconda.com/download/success 安装 双击 一直下一步安装 配置环境变量 为了在终端运行&#xff0c;需配置环境变量 进入到安装conda的目录并复制路径 设置高级环境变量 在终端运行 输入&#xff1a; conda list表明可以正常运行 参考…

LogViewer NLog, Log4Net, Log4j 文本日志可视化

LogViewer 下载 示例&#xff1a;NLog文本日志可视化软件&#xff0c;并且能够实时监听输出最新的日志 nlog.config 通过udp方式传输给LogViewer (udp://ip:port) <?xml version"1.0" encoding"utf-8" ?> <nlog xmlns"http://www.nlog-…

MuMu模拟器安卓12安装Xposed 框架

MuMu模拟器安卓12安装Xposed 框架 当开启代理后,客户端会对代理服务器证书与自身内置证书展开检测,只要检测出两者存在不一致的情况,客户端就会拒绝连接。正是这个原因,才致使我们既没有网络,又抓不到数据包。 解决方式: 通过xposed框架和trustmealready禁掉app里面校验…

Python Web 应用开发基础知识

Python Web 应用开发基础知识 引言 随着互联网的快速发展&#xff0c;Web 应用程序的需求日益增加。Python 作为一种简单易学且功能强大的编程语言&#xff0c;已经成为 Web 开发中广受欢迎的选择之一。本文将深入探讨 Python Web 开发的基础知识&#xff0c;包括常用框架、基…

CSS Module:告别类名冲突,拥抱模块化样式(5)

CSS Module 是一种解决 CSS 类名冲突的全新思路。它通过构建工具&#xff08;如 webpack&#xff09;将 CSS 样式切分为更加精细的模块&#xff0c;并在编译时将类名转换为唯一的标识符&#xff0c;从而避免类名冲突。本文将详细介绍 CSS Module 的实现原理和使用方法。 1. 思…

动力商城-03 Idea集成apifox Mybatis-Plus字段策略

1.Idea下载apifox插件 2.新建令牌放入Idea 3.右键上传到对应接口 4.设置前置url 插件能够自动识别swagger注解 Mybatis-Plus字段策略 1、FieldStrategy作用 Mybatis-Plus字段策略FieldStrategy的作用主要是在进行新增、更新时&#xff0c;根据配置的策略判断是否对实体对…

使用 npm 安装 Yarn

PS E:\WeChat Files\wxid_fipwhzebc1yh22\FileStorage\File\2024-11\spid-admin\spid-admin> yarn install yarn : 无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后…

Springboot 使用EasyExcel导出含图片并设置样式的Excel文件

Springboot 使用EasyExcel导出含图片并设置样式的Excel文件 Excel导出系列目录&#xff1a;★★★★尤其注意&#xff1a;引入依赖创建导出模板类逻辑处理controllerservice 导出效果总结 Excel导出系列目录&#xff1a; 【Springboot 使用EasyExcel导出Excel文件】 【Springb…

深入理解 source 和 sh、bash 的区别

1 引言 在日常使用 Linux 的过程中&#xff0c;脚本的执行是不可避免的需求之一&#xff0c;而 source、sh、bash 等命令则是执行脚本的常用方式。尽管这些命令都能运行脚本&#xff0c;但它们之间的执行方式和效果却有着显著的区别。这些区别可能会影响到脚本的环境变量、工作…

CC6学习记录

&#x1f338; cc6 cc6和cc1的国外链其实后半条链子是一样的&#xff0c;但是cc6的不局限于jdk的版本和commons-collections的版本。 回忆一下cc1的后半条链子&#xff1a; LazyMap.get()->InvokerTransformer.transform() 这里我们就结合了URLDNS链的思路&#xff0c;在…

飞凌嵌入式RK3576核心板已适配Android 14系统

在今年3月举办的RKDC2024大会上&#xff0c;飞凌嵌入式FET3576-C核心板作为瑞芯微RK3576处理器的行业首秀方案重磅亮相&#xff0c;并于今年6月率先量产发货&#xff0c;为客户持续稳定地供应&#xff0c;得到了众多合作伙伴的认可。 FET3576-C核心板此前已提供了Linux 6.1.57…

路漫漫其修远兮,吾将上下而求索---第一次使用github的过程记录和个人感受

文章目录 1.仓库位置2.新建仓库3.配置仓库4.克隆和上传5.推荐文章和我的感受 1.仓库位置 这个仓库的位置就是在我们的这个个人主页的右上角&#xff1b;如果是第一次注册账号的话&#xff0c;这个主页里面肯定是不存在仓库的&#xff0c;需要我们自己手动的进行创建&#xff1…

docker与大模型(口语化原理和实操讲解)

文章目录 一、镜像images1&#xff09;下载安装2&#xff09;docker images相关命令(保存、删除、上传、别名、搜索镜像) 二、容器container1&#xff09;展现所有在跑的容器服务ps2&#xff09;start /restart / kill / stop /rm 三、dockerfile四、volume五、network六、dock…

《基于Oracle的SQL优化》读书笔记

查看执行计划set autotrace traceonly explain在当前session中将优化器模式改为RULE。alter session set optimizer_modeRULE;统计信息存储在oracle的数据字典里&#xff0c;且从多个维度描述了oracle数据库里相关对象的实际数据量&#xff0c;实际数据分布等详细信息。 -- 对…

css:浮动

网页的本质上就是摆放盒子&#xff0c;把盒子摆到相应的位置上 css提供了三种传统的布局方式&#xff1a; 普通流&#xff08;标准流&#xff09;&#xff1a;标签按默认方式排列&#xff0c;最基本的布局方式 浮动 定位 实际开发中&#xff0c;一个网页基本包含了三种这种布局…

c++入门--引用与指针,const与引用,NULL与nullptr

1.引用与指针&#xff1a; 1.1引用的介绍&#xff1a; 引用相当于一个变量的别名&#xff0c;向函数传参后或者在main函数中可以直接对这个变量进行操作。 1.2引用的返回&#xff1a; 函数返回的时候是生成了一个临时变量&#xff0c;这个变量具有常性&#xff0c;是不能对这…

单片机智能家居火灾环境安全检测

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在现代社会&#xff0c;火灾安全始终是人们关注的重点问题。随着科技的不…

SpringBoot3全面复习

Springboot3 Spring Boot 3是Spring Boot框架的一个主要版本&#xff0c;它基于Spring Framework 6构建&#xff0c;引入了对最新Java版本&#xff08;如Java 17及以上&#xff09;的支持&#xff0c;并提供了许多新特性和改进。Spring Boot 3旨在简化Spring应用的初始搭建以及…