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

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.xdnf.cn/news/16678.html

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

相关文章

前端flutter

在一个风和日丽的午后&#xff0c;本以为又是一个普通的摸鱼日子&#xff0c;却突然被领导拉去谈话&#xff0c;意思就是公司后面要基于现有小程序和H5项目&#xff0c;转化到APP上去&#xff1b;无奈的是目前部门的研发小组并没有能够开发APP的人&#xff0c;既然这事找到我了…

在uniapp中使用canvas封装组件遇到的坑,数据被后面设备覆盖,导致数据和前面的设备一样

在uniapp开发中使用canvas封装了一个叫cirlceTemp的组件(温度圆环图表) 封装的HTML代码 <template><view class"progress-box" :style"{ width: ${progressWidth}rpx, height: ${progressHeight}rpx }"><canvas class"progress-bg&qu…

linux病毒编写+vim shell编程

学习视频来自B站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 请一定遵循《网络空间安全法》&#xff01;&#xff01;&#xff01; Linux目录介绍 /bin 二进制可执行文件&#xff08;kali里面是工具一些文件&#xff09;/etc 系统的管理和配置文…

【小程序】dialog组件

这个比较简单 我就直接上代码了 只需要传入title即可&#xff0c; 内容部分设置slot 代码 dialog.ttml <view class"dialog-wrapper" hidden"{{!visible}}"><view class"mask" /><view class"dialog"><view …

【玩具蛇——DFS】

题目 代码 #include <bits/stdc.h> using namespace std; int g[5][5]; int dx[] {0, 0, -1, 1}, dy[] {-1, 1, 0, 0}; int ans; void dfs(int x, int y, int t) {g[x][y] t;if (t > 16){ans;g[x][y] 0;return;}for (int i 0; i < 4; i){int nx x dx[i], n…

aar打包以及混淆问题

我们做sdk&#xff0c;经常要打成aar包。 如何打aar包&#xff1f; 1、首先module必须是library 2、build.gradle写的应用aar和module&#xff0c;要改成compileOnly&#xff0c;这样打包的时候就不会报错&#xff0c;因为aar不允许包含其他aar 3、 4、 aar包如何混淆 bui…

hhdb数据库介绍(9-14)

SQL语法支持 DML语句 在关系集群数据库中&#xff0c;DML语句的逻辑将变的更为复杂。计算节点将DML语句分为两大类&#xff1a;单库DML语句与跨库DML语句。 单库DML语句&#xff0c;指SQL语句只需在一个节点上运行&#xff0c;即可计算出正确结果。假设分片表customer分片字…

IDEA旗舰版编辑器器快速⼊门(笔记)

简介&#xff1a;javaweb开发必备软件之IDEA期间版介绍 DEA编辑器器版本介绍 官⽹网&#xff1a;https://www.jetbrains.com/地址&#xff1a;https://www.jetbrains.com/idea/download/#sectionmac DEA 分社区版(Community) 和 旗舰版(Ultimate)&#xff0c;我们做JavaWeb开…

HTML5实现剪刀石头布小游戏(附源码)

文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面 2.效果和源码源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/143798520 HTM…

DAY65||Bellman_ford 队列优化算法(又名SPFA)|bellman_ford之判断负权回路|bellman_ford之单源有限最短路

Bellman_ford 队列优化算法&#xff08;又名SPFA&#xff09; 94. 城市间货物运输 I 思路 大家可以发现 Bellman_ford 算法每次松弛 都是对所有边进行松弛。 但真正有效的松弛&#xff0c;是基于已经计算过的节点在做的松弛。 给大家举一个例子&#xff1a; 本图中&#xff…

关于adb shell登录开发板后terminal显示不完整

现象 今天有个同事跟我说&#xff0c;adb shell 登录开发板后&#xff0c;终端显示不完整&#xff0c;超出边界后就会出现奇怪的问题&#xff0c;比如字符覆盖显示等。如下图所示。 正常情况下应该如下图所示&#xff1a; 很明显&#xff0c;第一张图的显示区域只有完整区域…

01 P2367 语文成绩

题目&#xff1a; 样例输入&#xff1a; 3 2 1 1 1 1 2 1 2 3 1 样例输出&#xff1a; 2 代码&#xff1a; #include<bits/stdc.h> using namespace std;long long sa[5000005]; long long sb[5000005];int main() {int n,p;cin>>n>>p;for(int i1;i<n;i)…

聊聊Flink:Flink的分区机制

一、前言 flink任务在执行过程中&#xff0c;一个流&#xff08;stream&#xff09;包含一个或多个分区&#xff08;Stream partition&#xff09;。TaskManager中的一个slot的subtask就是一个stream partition&#xff08;流分区&#xff09;&#xff0c;一个Job的流&#xf…

VRRP HSRP GLBP 三者区别

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

VMware 17虚拟Ubuntu 22.04设置共享目录

VMware 17虚拟Ubuntu 22.04设置共享目录 共享文件夹挂载命令&#xff01;&#xff01;&#xff01;<font colorred>配置启动自动挂载Chapter1 VMware 17虚拟Ubuntu 22.04设置共享目录一、卸载老版本二、安装open-vm-tools<font colorred>三、配置启动自动挂载四、添…

二叉树Golang

二叉树 前言 完全二叉树 最底层节点按顺序从左到右排列。 满二叉树 一颗二叉树只有0度和2度的节点。 二叉搜索树 左子树上的所有节点的值均小于根节点的值。右子树上的所有节点的值均大于根节点的值。 平衡二叉搜索树 左右两个子树的高度差的绝对值不超过1 。 二叉树的存储…

【鸿蒙开发】第十三章 ArkTS基础类库-容器(数据结构)

目录 1 容器简述 2 线性容器 2.1 ArrayList 2.2 Vector 2.3 List 2.4 LinkedList 2.5 Deque 2.6 Queue 2.7 Stack 2.8 线性容器的使用 3 非线性容器 3.1 HashMap 3.2 HashSet 3.3 TreeMap 3.4 TreeSet 3.5 LightWeightMap 3.6 LightWeightSet 3.7 PlainArray…

3D电子商务是什么?如何利用3D技术提升销售转化?

在数字化浪潮席卷全球的今天&#xff0c;网上购物已成为消费者日常生活中不可或缺的一部分。然而&#xff0c;尽管其便捷性无可比拟&#xff0c;但传统电商模式中的“看不见、摸不着”问题始终困扰着消费者与商家。商品是否符合期望、尺寸是否合适、颜色是否真实……这些不确定…

腾讯地图GL JS点标识监听:无dragend事件的经纬度获取方案

引入腾讯地图SDK <!--腾讯地图 API--><script charset"utf-8" src"https://map.qq.com/api/gljs?librariestools&v1.exp&key***"></script>构建地图容器 <div class"layui-card"><div class"layui-car…

基于SpringBoot+RabbitMQ完成应⽤通信

前言&#xff1a; 经过上面俩章学习&#xff0c;我们已经知道Rabbit的使用方式RabbitMQ 七种工作模式介绍_rabbitmq 工作模式-CSDN博客 RabbitMQ的工作队列在Spring Boot中实现&#xff08;详解常⽤的⼯作模式&#xff09;-CSDN博客作为⼀个消息队列,RabbitMQ也可以⽤作应⽤程…