10.函数

news2024/10/9 22:17:37

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
在这里插入图片描述

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

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

相关文章

gitee中fork了其他仓库,如何在本地进行同步

GitHub 操作&#xff1a;同步 Fork 来的仓库&#xff08;上游仓库&#xff09;_sigmarising的博客-CSDN博客 1. 设置upstream 2. git pull --rebase 3. 然后再执行pull、push操作

请将所有未处理的消息传递给 DefWindowProc

在之前的一篇文章中&#xff0c;我曾提到&#xff1a;如果你希望拒绝一次设备移除查询请求&#xff0c;则需要返回一个特殊的 BROADCAST_QUERY_DENY 值&#xff0c;因为太多的程序开发者认为&#xff0c;他们已经覆盖了所有 Windows 消息的处理了&#xff0c;对于其他的消息&am…

11、PHP面向对象1

1、PHP的面向对象与其他语言类似&#xff0c;但也有不同。 PHP访问成员变量时&#xff0c;需要用“->”&#xff0c;而不能用“.”&#xff0c;访问成员函数时&#xff0c;需要用“->”&#xff0c;而不能用“.”。操作符“::”可以在没有任何声明实例的情况下访问类中的…

我身边IT业40岁的老家伙们都去哪儿了?

在IT行业&#xff0c;5年&#xff0c;足够一个程序员成为大牛、或者被淘汰了。 今年34岁&#xff0c;马上就到了那个敏感的“35岁”节点&#xff0c;当程序员的第10年&#xff0c;算是比较老的程序员了。 借身边一些朋友的真实经历来说说这些40岁的老家伙们最后都去哪儿了。 …

ansible自动化运维(一)

&#x1f618;作者简介&#xff1a;正在努力的99年公司职员。 &#x1f44a;宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。 &#x1f64f;创作不易&#xff0c;…

Spring 6 容器 IOC 万字详解

IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Java 对象的…

Python怎么实现模式匹配

什么是模式匹配 模式匹配是一种用于在数据中寻找特定模式或结构的技术。它可以用于识别、查找和提取符合特定模式要求的数据。 在计算机科学中&#xff0c;模式匹配通常用于字符串处理和数据分析领域。一些常见的模式匹配模式包括&#xff1a; 1. 字符串匹配&#xff1a;在一…

Python输出所有的Unicode字符!

代码一点点&#xff0c;主要就是用了chr函数&#xff1a; fopen("Unicode_Entire.txt","w",encoding"utf-8") i0 while i < 205745:f.write(chr(i))i1if i 0xD800:i 0xE000 f.close()1.因为直接输出太慢&#xff0c;改为文件输出 2.D800~D…

数据可视化(1)

使用python带的matplotlib库进行简单的绘图。使用之前先进行安装&#xff0c;pip install matplotlib。如果安装了Anaconda,则无需安装matplotlib。 1.简单折线图 #绘制简单图表 import matplotlib.pyplot as plt plt.plot([1,2,3,4,5]) plt.show() import matplotlib.pyp…

使用vscode+platformio搭建arduino开发环境

存在的问题&#xff1a; Arduino编译时会将所有的C文件都编译一遍造成编译很慢&#xff0c;一个简单的工程稍加修改有可能都需要三四分钟才能编译完成&#xff0c;同时arduino也不支持代码跳转查看功能&#xff0c;不方便代码查看。 解决方法&#xff1a; 使用vscodeplatfor…

Scala动态创建对象,scala反射

一、动态对象创建方法 方法1–java的迁移 //可带参数 val clsFullName"你要的类名路径"//例如&#xff1a;com.xlt.test.Fruitsval taskClass if (customizedClassLoader ! null) customizedClassLoader.loadClass(clsFullName)else this.getClass.getClassLoader…

在Clion中开发rt-thread

一、在github或者gitee中下载源代码&#xff08;不要下载master最新分支的&#xff0c;下载稳定的版本分支 v5.0&#xff09; https://gitee.com/rtthread 二、在rt-thread官网上下载env工具、并安装mingw、cmake环境 https://www.rt-thread.org/document/site/#/developmen…

Django快速上手

Django简介 Django 框架最初的诞生&#xff0c;主要是用来开发和管理 Lawrence Publishing Group&#xff08;劳伦斯出版集团&#xff09;旗下新闻网站的一款软件&#xff0c;是一款属于 CMS&#xff08;Content Management System&#xff0c;内容管理系统&#xff09;类的软…

FANUC机器人SRVO-217故障报警原因分析及参考解决办法

FANUC机器人SRVO-217故障报警原因分析及参考解决办法 如下图所示,示教器提示:SRVO-217紧急停止电路板未找到, 查阅手册可以看到以下的报警说明: 故障原因: 通电时未能识别紧急停止电路板或者增设的安全I/O装置。连接有多个安全I/O装置的系统中,在报警信息的最后,会显示发…

SkyWalking链路追踪-搭建-spring-boot-cloud-单机环境 之《10 分钟快速搭建 SkyWalking 服务》

首先了解一下单机环境 第一步&#xff0c;搭建一个 Elasticsearch 服务。第二步&#xff0c;下载 SkyWalking 软件包。第三步&#xff0c;搭建一个 SkyWalking OAP 服务。第四步&#xff0c;启动一个 Spring Boot 应用&#xff0c;并配置 SkyWalking Agent。第五步&#xff0c;…

测试开源C#人脸识别模块ViewFaceCore(2:人脸关键点定位器和活体检测)

ViewFaceCore模块中的FaceLandmarker类支持识别人脸关键点&#xff0c;也即人脸上的关键位置的坐标&#xff0c;其中主要调用Mark函数返回图片中指定人脸的关键点位置集合&#xff0c;该类需配合FaceDetector类共同使用。   FaceLandmarker类支持识别3种类型的人脸关键点&…

KingFunsion工程开发规范——JS规范

哈喽&#xff0c;大家好&#xff0c;我是雷工。 今天学习KingFunsion工程开发规范之JS规范。 第一章 统一规范 1.1. 一行代码只做一件事&#xff1b; 1.2. 长行拆分&#xff1b; 1.3. 代码块外使用try catch包裹&#xff1b; 1.4. 全局变量在数据词典中定义&#xff1b;…

分析业务团队如何进行技术建设

背景 大部分中大型的互联网公司&#xff0c;会按照一个技术团队 多个业务团队的组织形式。技术团队负责技术基础建设&#xff0c;而业务部门更多的聚焦在业务迭代上。 这种组织形式有其优越性&#xff1a; 可以避免大量重复技术建设 减少上下文&#xff0c;降低沟通成本 …

网络安全 Day20-计算机网络基础知识05(网络原理)

计算机网络基础知识05&#xff08;网络原理&#xff09; 1. OSI 模型2. VMware虚拟机NAT模式下上网原理3. 不能上网故障排查 1. OSI 模型 OSI 7层网络通信原理模型 OSI 国际网互联 OSI 数据包封装解封装过程 北京局域网主机A到深圳局域网主机B数据工作流程 2. VMware虚拟机N…

Qt+GDAL开发笔记(一):在windows系统mingw32编译GDAL库、搭建开发环境和基础Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/131931309 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…