10.函数

10.1为什么需要函数

●函数:
function,是被设计为 执行特定任务的代码块
●作用:
精简代码方便复用(实现代码复用,提高开发效率)
比如我们前面使用的alert()、prompt() 和console.log()都是一些js函数,只不过已经封装好了,可直接使用

10.2函数使用

●函数的声明语法

function函数名() {
	函数体
}

●函数名命名规范
➢和变量命名基本一致
➢尽量小驼峰式命名法
➢前缀应该为动词
➢命名建议:常用动词约定

●函数的调用语法

函数名()

10.3函数传参

●声明语法

function 函数名(参数列表) {
	函数体
}

◆参数列表
➢传入数据列表
➢声明这个函数需要传入几个数据
➢多个数据用逗号隔开

●调用语法

函数名(传递的参数列表)

●实参和形参
形参可以理解为是在这个函数内声明的变量,实参可以理解为是给这个变量赋值
在这里插入图片描述
2.函数传参-参数默认值
形参:可以看做变量,如果一个变量不给值,默认是undefined
如果做用户不输入实参,出现undefined + undefined结果是什么?
➢NaN
我们可以改进下,用户不输入实参,可以给形参默认值,可以默认为0,这样程序更严谨,如下:

function getSum(x = 0, y = 0) {
	document .write(x + y)
}
getSum() // 结果是0,而不是NaN
getSum(1, 2) //结果是3

3.案例-数组求和
【示例代码】

function getSum(arr = []) { //给形参默认值
            let sum = 0
            for (let i = 0; i < arr.length; i++) {
                sum += arr[i]
            }
            document.write(sum)
        }
getSum([1, 2, 3, 4]) //结果是 10
getSum() //结果是 0

10.4函数返回值

●有返回值函数的概念:
当调用某个函数,这个函数会返回一个结果出来
●语法

return 数据

●使用

function getSum(x, y) {
	return x + y
}
let num = getSum(10, 30)
document.write( num )

●细节:
➢在函数体中使用return关键字能将内部的执行结果交给函数外部使用
➢return 后面代码不会再被执行,会立即结束当前函数,所以return后面的数据不要换行写
➢return函数可以没有return, 这种情况函数默认返回值为undefined
●如何返回多个值?
可以返回数组 return [num, min]

10.5函数细节补充

●两个相同的函数后面的会覆盖前面的函数
●断点调试:进入函数内部看执行过程——F11
●在Javascript中 实参的个数和形参的个数可以不一致
➢如果形参过多会自动填上undefined (了解即可)
➢如果实参过多那么多余的实参会被忽略(函数内部有一个arguments,里面装着所有的实参)
●函数一旦碰到return就不会在往下执行了 函数的结束用return

10.6作用域

1.通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
在这里插入图片描述
在JS中,根据作用域不同,变量可分为:
在这里插入图片描述
2.变量的访问原则
●只要是代码,就至少有一个作用域
●写在函数内部的是局部作用域
●如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
●访问原则:在能够访问到的情况下先局部,局部没有在找全局
●采取就近原则的方式来查找变量最终的值

两个特殊情况:
●如果函数内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐

function fn() {
   num = 10
}
fn()
console.log(num) //10

●函数内部的形参可以看做是局部变量。

10.7匿名函数

1.函数可以分为:
●具名函数
声明: function fn() {}
调用: fn()
●匿名函数
function() {}

●具名函数和函数表达式的不同
(1)具名函数的调用可以写到任何位置
(2)函数表达式,必须先声明函数表达式,后调用

2.匿名函数
没有名字的函数,无法直接使用。
匿名函数使用方式:
➢函数表达式
➢立即执行函数

(1)函数表达式
将匿名函数赋值给一个变量, 并且通过变量名称进行调用 我们将这个称为函数表达式
语法:

let fn = function () {
// 函数体
}

调用:

fn()  //函数名()

使用场景:
●后期web API会使用:

<body>
< button>点击我</button>
<script>
let btn = document . querySelector( ' button')
btn.onclick = function() {
alert( '我是匿名函数')
}
</script>
</body>

(2)立即执行函数
不需要调用,立即执行
场景介绍:避免全局变量之间的污染
语法:

//方式1
(function (x, y) {
    console.log(x + y)
})(1, 2);  //这个小括号相当于调用函数

// 方式2
(function (x, y) {
    console.log(x + y)
}(1, 2));   //立即执行函数后面必须加 ;

1.	(function () { })()
2.	(function () { }())

10.8转换时间案例

需求:用户输入秒数,可以自动转换为时分秒
分析:
①:用户输入总秒数(注意默认值)
②:计算时分秒(封装函数) 里面包含数字补0
③:打印输出

计算公式:计算时分秒
小时:h= parselnt(总秒数/ 60/ 60 % 24)
分钟:m= parselnt(总秒数/ 60 % 60 )
秒数:s = parselnt(总秒数% 60)
【示例代码】

<script>
        let second = +prompt('输入总的秒数:')
        function getTime(t) {
            let h = parseInt(t / 60 / 60 % 24)
            let m = parseInt(t / 60 % 60)
            let s = parseInt(t % 60)
            h = h < 10 ? '0' + h : h
            m = m < 10 ? '0' + m : m
            s = s < 10 ? '0' + s : s
            return `${h}小时${m}分钟${s}`
        }
        let str = getTime(second)
        document.write(str)
</script>

在这里插入图片描述
在这里插入图片描述

10.9逻辑中断

开发中,还会见到以下的写法:

function getSum(x, y) {
	x = x || 0
	y = y || 0
	console.log(x + y)
}
getSum(1, 2) //3

类似参数的默认值写法

1.逻辑运算符里的短路
●短路:只存在于 && 和 || 中,当满足一定条件会让右边代码不执行
在这里插入图片描述
&& 和 || 的区别:
console.log(11 && 22) // 都是真,结果返回最后一个真值 22
console.log(11 | | 22) // 输出第一个真值 11

2.转换为Boolean型
●显示转换:
记: "、0、undefined、null、false、NaN转换为布尔值后都是false,其余则为true
注意:空数组和空对象是真

●隐式转换:
(1) 有字符串的加法 ”” + 1 , 结果是 “1”
(2) 减法 - (像大多数数学运算一样)只能用于数字,它会使空字符串 “” 转换为0
(3) null经过数字转换之后会变为0
(4) undefined 经过数字转换之后会变为NaN
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

编译/反编译

1.Android APK 1.软件 1.apktool 1.作用&#xff1a;反编译apk或重新打包apk 2.dex2jar 1.作用&#xff1a;将Android的可执行文件.dex转换为.jar 3.jd-gui 1.作用&#xff1a;方便阅读jar文件的代码工具 2.步骤 1.通过apktool将apk软件反编译2.使用dex2jar将classes.dex文件转…

(十五) InfluxDB服务进程参数(influxd命令的用法)

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 15 章 InfluxDB服务进程参数&#xff08;influxd命令的用法&#xff09; 15.1 influxd命令罗列 1、我们的…

Django 图书管理系统

一、功能及页面设计 二、页面展示 (1)首页 (2)注册 (3)登录 (4)普通用户登录 4.1查看图书页面 4.2查看图书详情页 4.3修改密码 (5)管理员登录 5.1添加图书 5.2添加图片 三、代码展示 因为代码太多不好一个个展示 所以需要源码的小伙伴可以找我要代码 感谢三连支持&#xff0…

【C++】多态原理剖析,Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout

author&#xff1a;&Carlton tag&#xff1a;C topic&#xff1a;【C】多态原理剖析&#xff0c;Visual Studio开发人员工具使用查看类结构cl /d1 reportSingleClassLayout website:黑马程序员C tool&#xff1a;Visual Studio 2019 date&#xff1a;2023年7月24日 目…

最快桌面UI:Siticone Desktop UI 2.1.1 cRACK

富图尔主义控制 80 多个 .NET UI 组件和控件 现代未来 UI/UX 组件 为 Visual Studio 开发做好准备 无限的免费产品支持案例 超轻量和快速性能 广泛可定制和主题化 低资源消耗和占地面积 免版税开发和部署 NET 的最佳 UI 和 UX 库 从最好的图书馆探索无缝流畅的体验 使…

二、SQL-5.DQL-9.执行顺序

一、案例&#xff1a; 查询年龄大于15的员工的姓名、年龄&#xff0c;并根据年龄进行升序排序 select name, age from emp where age > 15 order by age asc; 先执行①from&#xff08;定义emp的别名为e&#xff09;&#xff0c;再执行②where&#xff08;调用别名e&…

SpringBoot集成Druid实现数据库连接池

一、引入依赖 完整的pom文件如下所示: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http…

如何从任何地方远程解决电脑问题?

​如何远程解决电脑问题&#xff1f; “嗨&#xff01;我有一台Windows 10家用电脑。我外出旅行&#xff0c;但我的家人告诉我我的电脑有一段时间无法正常工作。我该如何远程检查电脑并解决相应的问题&#xff1f;提前谢谢&#xff01;” 您是否正在寻找远程解决电…

JAVA解析EXCEL(JExcelAPI,POI,EasyExcel)

前言 文章目录 前言JExcelAPIDemo POIHSSFWorkBookXSSFWorkBookDemo SXSSFWorkBookDemo XSSFReaderDemo EasyExcelDemo demo代码&#xff1a;https://github.com/RwTo/excel-demo JAVA解析Excel 一般有三种方式 JExcelAPI POI EasyExcel JExcelAPI 官网&#xff1a;https://je…

【问题记录】Ubuntu 22.04 环境下,程序报:段错误(核心已转储)怎么使用 core 文件和GDB调试器 解决?

目录 环境 问题情况 解决思路 原因分析 解决方法 番外知识 环境 VMware Workstation 16 Pro &#xff08;版本&#xff1a;16.1.2 build-17966106&#xff09;ubuntu-22.04.2-desktop-amd64 问题情况 本人在运行百万并发的服务端程序时&#xff0c;程序运行报&#xff1a…

【云原生】Docker镜像的创建,Dockerfile

一、Docker镜像的创建 创建镜像有三种方法&#xff0c;分别为【基于已有镜像创建】、【基于本地模板创建】以及【基于Dockerfile创建】。 1.基于现有镜像创建 &#xff08;1&#xff09;首先启动一个镜像&#xff0c;在容器里做修改docker run -it --name web centos:7 /bin/…

UDS之27服务

SecurityAccess&#xff08;0x27&#xff09;—— 安全访问 这个服务的目的是为那些限制访问&#xff0c;以及和排放、安全相关的一些服务和数据提供一些访问权限来保护数据。 此服务执行步骤如下&#xff1a; &#xff08;1&#xff09;Client请求一个种子&#xff08;Seed…

可证明安全初步(Provable Security Basics)

Speecher: Bingsheng Zhang 这一系列的课程&#xff0c;为了介绍一些基础&#xff0c;弥补一些上密码学课和看论文的Gap。 历史上的密码学是art&#xff0c;就像鲁班锁&#xff0c;看着很精妙&#xff0c;但是没有证明。 1970s以来&#xff0c;逐渐发展成Science。 定义和模…

Vue3 axios数据请求封装

Vue3 axios数据请求封装 环境&#xff1a;vue3tsvite 首先在项目目录下安装axios 运行 npm install axios 成功后在package.json文件会显示。 目录&#xff1a; request.ts文件代码&#xff1a; import axios from axiosconst request axios.create({baseURL:https://api.…

20230721 Essex UK, Dongbing Gu 公开讲座--机器人前沿

个人主页&#xff1a; https://www.essex.ac.uk/people/GUDON81301/dongbing-gu 机器人领域任务的特点&#xff1a;dull, dirty, dangerous tasks in remote spaces 机器鱼&#xff1a; 实时港口环境监测 机器鱼群探索算法 化学传感器 水面声呐定位系统/SLAM/通信问题 Robotic …

SpringBoot中使用测试框架MockMvc来模拟HTTP请求测试Controller接口

场景 Java中进行单元测试junit.Assert断言、Mockito模拟对象、verify验证模拟结果、Java8中lambda的peek方法使用&#xff1a; Java中进行单元测试junit.Assert断言、Mockito模拟对象、verify验证模拟结果、Java8中lambda的peek方法使用_assert java8_霸道流氓气质的博客-CSD…

【MySQL】centos 7下MySQL的环境搭建

从本期博客开始我们正式进入到数据库的学习&#xff0c;在学习数据库时所用到的工具是Linux环境下的MySQL 目录 一、检查环境中是否装有MySQL 二、获取MySQL官方yum源 三、配置MySQL官方yum源 四、一键安装MySQL 五、启动mysql服务 六、登录MySQL 七、修改mysql配置文件…

智慧园区电力监控解决方案

1、概述 电力监控系统实现对园区变电站、配电房内断路器、变压器、柴油发电机以及其它重要设备进行监视、测量、记录、报警等功能&#xff0c;并与保护设备和远方控制中心及其他设备通信&#xff0c;实时掌握园区变电站和配电房运行状况&#xff0c;快速排除故障&#xff0c;保…

redis中使用bloomfilter判断元素是否存在

一 bloomfiler的作用 1.1 bloomfilter的作用 由一个初始值为0的bit数组组成&#xff0c;和多个hash函数构成&#xff0c;用来判断集合中是否存在某个元素。 一个很长的二进制数组&#xff08;00000000&#xff09;一系列随机hash算法映射函数。主要用于判断一个元素是否存在…