Js - 函数(四)

1.函数简单介绍

  • 什么是函数?

函数(function)是执行特定任务的一段代码块

  • 为什么需要函数?

可以实现代码复用,提高开发效率



2.函数使用

  • 函数的声明语法

  • 函数名命名规范

  • 函数的调用语法 

  • 函数体 

函数体是函数的构成部分,它负责将相同或相似代码“包裹”起来,直到函数调用时函数体内的代码才会被执行。函 数的功能代码都要写在函数体当中。


3.函数传参

  • 声明语法 

  •  调用语法

  •  形参和实参

  • 参数默认值



4.函数返回值

  • 当函数需要返回数据出去时,用return关键字 

 细节:

  1. 在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用
  2. return 后面代码不会再被执行,会立即结束当前函数,所以 return 后面的数据不要换行写
  3. return函数可以没有 return,这种情况函数默认返回值为 undefined
  4. 两个相同的函数后面的会覆盖前面的函数
  5. 在Javascript中 实参的个数和形参的个数可以不一致
  6. 如果形参过多 会自动填上undefined (了解即可)
  7. 如果实参过多 那么多余的实参会被忽略 (函数内部有一个arguments,里面装着所有的实参)
  8. 函数一旦碰到return就不会在往下执行了 函数的结束用return

总结

1. 为什么要让函数有返回值
Ø 函数执行后得到结果,结果是调用者想要拿到的(一句话,函数内部不
需要输出结果,而是返回结果)
Ø 对执行结果的扩展性更高,可以让其他的程序使用这个结果


2. 函数有返回值用那个关键字? 有什么注意事项呢?
Ø 语法:return 数据
Ø return后面不接数据或者函数内不写return,函数的返回值是
undefined
Ø return能立即结束当前函数, 所以 return 后面的数据不要换行写
 



5.作用域

  • 作用域介绍

通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名 字的作用域。

作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突

  • 作用域使用错误场景

  • 作用域特殊情况

如果函数内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐
但是有一种情况,函数内部的形参可以看做是局部变量。

列如:

1. JS 中作用域分为哪2种?

  • 全局作用域。函数外部或者整个script 有效
  • 局部作用域。也称为函数作用域,函数内部有效


2. 根据作用域不同,变量分为哪2种?

  • 全局变量
  • 局部变量


3. 有一种特殊情况是全局变量是那种?我们提倡吗?

  • 局部变量或者块级变量 没有let 声明直接赋值的当全局变量看,我们强烈不提倡
  • 还有一种特殊情况,函数内部的形参可以当做局部变量看

知识扩展(特殊知识点)

1. 在不同作用域下,可能存在变量命名冲突的情况, 到底改执行谁呢?

变量的访问原则

  1. 只要是代码,就至少有一个作用域
  2. 写在函数内部的局部作用域
  3. 如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
  4. 访问原则:在能够访问到的情况下 先局部, 局部没有在找全局

2.逻辑运算符里的短路 

短路:只存在于 && 和 || 中,当满足一定条件会让右边代码不执行

案例

 3.转换为Boolean型(重点--背下来)

记忆: ‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true

小案例:

function f1() {
let num = 123function f2() {console.log( num )}f2()
}
let num = 456
f1()
function f1() {
let num = 123
function f2() {
let num = 0
console.log(num)
}
f2()
}
let num = 456
f1()
let a = 1
function fn1() {
let a = 2
let b = '22'
fn2()
function fn2() {
let a = 3
fn3()
function fn3() {
let a = 4
console.log(a) //a的值 ?
console.log(b) //b的值 ?
}
}
}
fn1()

答案: 123,0,4 '22'


6.匿名函数

函数可以分为:

没有名字的函数, 无法直接使用。

匿名函数的使用方式:

  1.  函数表达式
  2.  立即执行函数
  • 函数表达式

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

  • 立即执行函数

场景介绍: 避免全局变量之间的污染

综合案例:

 案例1:求和函数封装练习

要求:

  1. 封装函数, 名字为sum

  2. 功能: 根据传入的两个数,求和并且返回求和的结果(函数必须有return返回值)

function sum(a = 0, b = 0){return a+b
}let re = sum(10,20)

案例2:封装一个函数,可以求任意数组的和 或 平均值

函数可以传递2个参数,比如 handleData(arr, true) handleData 处理数据的意思

  • 参数一: 接受实参传递过来的数组

  • 参数二: 布尔类型 如果是true或者不传递参数 是求和操作, 如果传递过来的参数是 false 则是求平均值

function handleData(arr = [], a ){let sum = 0let resultfor(let i = 0;i<arr.length;i++){sum+=arr[i]}if(a === undefined || a = true){result =sum}if(a === false){result =sum /arr.length}return result    
}let result = handleData([1,2,3,4,5])
let result = handleData([1,2,3,4,5],false)

案例3:用户输入秒数,可以自动转换为时分秒

需求: 用户输入秒数,可以自动转换为时分秒
分析:
①: 用户输入总秒数 (注意默认值)
②:计算时分秒(封装函数) 里面包含数字补0
③:打印输出
计算公式:计算时分秒
小时: h = parseInt(总秒数 / 60 / 60 % 24)
分钟: m = parseInt(总秒数 / 60 % 60 )
秒数:    s = parseInt(总秒数 % 60 )

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>function getTime(){let time = +prompt('请输入秒数')//得到时let hour = parseInt(time / 60 / 60 %60) //得到分let minute = parseInt(time / 60 % 60) if(minute<10){minute='0'+minute}// 得到秒let second = parseInt(time %60)if(second<10){second='0'+second}console.log( `${time}转化成时间是${hour}小时${minute}分${second}秒`)}// 调用函数getTime()</script>
</body>
</html>

函数与java中方法的不同点(比较明显的)

1   函数的声明方式不同

  • Js的函数=function 函数名 (参数){}
  • Java的方法=修饰符 返回类型 方法名 (参数){}

2  函数传参不同

  • js中,函数的传参比较灵活,如果这个函数由二个形参,函数传参可以传0 ,2,3都可以,如果传一个则默认二个形参的默认值为undefined,如果2就是正常的传参,如果三个,则前二个正常赋值,第三个不接收,而且Js的参数不对类型进行限制,就是你想传什么参数都可以
  • 在java中,方法传参,个数,类型,顺序必须一一对应,如果个数不对则方法调用失败,如果类型不对,方法也调用失败,顺序不对,则赋值不对
  • 这里就可以看出强类型和弱类型的差别了

3 返回值 

  • JS的返回值类型是可以随意的,意思就是可以随便返回一个类型
  • Java的返回值类型是有限制的,必须是和方法定义的返回值类型一样或者是返回类型的子类,否则报错

4.作用域

基本一样,唯一区别的点就是java中的代码定义在类中,而Js代码定义在<script></script>这个标签中,所以<script></script>类似于java中的主类

其他的那些编程思想基本和java或者说其他语言都是差不多的

以上是个人总结,可能有错误   哈哈!!!!

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

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

相关文章

数据库开发工具:Navicat Premium 16 (Win/Mac)中文激活版

Navicat Premium 16 是一款强大的数据库管理工具&#xff0c;旨在帮助用户更轻松地管理和维护各种数据库类型。 以下是关于 Navicat Premium 16 的详细介绍&#xff1a; 数据库支持&#xff1a;Navicat Premium 16 支持多种数据库类型&#xff0c;包括 MySQL、PostgreSQL、SQLi…

【vpp2206 测试】

vpp 2206编译# ./extras/vagrant/build.sh # make build # make runstartup-default.conf 的内容cpu {main-core 0 }unix {interactive cli-listen 127.0.0.1:5002log /tmp/vpp.logfull-coredumpstartup-config /home/king/share/vpp/startup.txt }dpdk {uio-driver igb_uiodev…

在Linux下配置Apache HTTP服务器

在Linux的世界里&#xff0c;如果说有什么比解决各种“神秘”的故障更让人头疼&#xff0c;那一定就是配置Apache HTTP服务器了。这不是因为Apache有什么问题&#xff0c;而是因为配置它简直就像解谜游戏&#xff0c;一不留神就会让你陷入无尽的纠结。 首先&#xff0c;你需要…

【AI视野·今日Sound 声学论文速览 第四十五期】Wed, 10 Jan 2024

AI视野今日CS.Sound 声学论文速览 Wed, 10 Jan 2024 Totally 12 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Masked Audio Generation using a Single Non-Autoregressive Transformer Authors Alon Ziv, Itai Gat, Gael Le Lan, Tal Remez, Felix…

Debian/Ubuntu配置aliyun源和安装工具

将 Debian 10 的 apt-get 源更换为 aliyun&#xff0c;以提升国内环境 apt install 的速度。 1&#xff09;备份原 apt-get 源文件 roote3c22f627b9e:~# cd /etc/apt roote3c22f627b9e:/etc/apt# cp sources.list sources.list.bak 2&#xff09;清除原 apt 源文件内容 ro…

解决python画图无法显示中文的问题

python画图遇到的问题&#xff1a; 中文不显示&#xff1a; 解决方法&#xff1a;把字体设置为支持中文的字体&#xff0c;比如黑体 黑体下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1BD7zQEBUfcIs6mC2CPYy6A?pwdv120 提取码&#xff1a;v120 pyhon…

【离散数学】xjtu版离散复习攻略

据学长及同级同学经验&#xff0c;按我校的考察难度&#xff0c;离散数学一天速通不是问题。如果你是正在阅读本篇的学弟/学妹&#xff0c;且复习时间紧张&#xff0c;可考虑把离散放到考前一天来复习。 网络上的资源已经足够详尽&#xff0c;只不过大多数没有介绍自然推理系统…

485总线抢占冲突问题

假如当前有一个主机&#xff0c;和两个从机&#xff0c;主机发送msg1给从机1&#xff0c;10毫秒后&#xff0c;发送msg2给从机2。 然后从机1和从机2都会回复报文给主机&#xff0c;但是如果从机2想要回复给主机的时候&#xff0c;从机1正在发送报文给主机&#xff0c;这时候会怎…

Visual Studio常用快捷键及调试操作

CtrlF10 运行到光标处 调试时候不用一行行按F10了CtrlMM 折叠或展开当前方法CtrlMO 折叠所有方法CtrlML 展开所有方法CtrlEW 自动换行/取消自动换行CtrlU 选中文本转小写CtrlShiftU 选中文本转大写CtrlWinO 启动软键盘F9 光标行加断点CtrlAltB 打开断点窗口 或通过Debug -> …

【发票识别】支持pdf、ofd、图片格式的发票

背景 为了能够满足识别各种发票的功能&#xff0c;特地开发了当前发票识别的功能&#xff0c;当前的功能支持pdf、ofd、图片格式的发票识别&#xff0c;使用到的技术包括文本提取匹配、ocr识别和信息提取等相关的技术&#xff0c;用到机器学习和深度学习的相关技术。 体验 体…

ChatGPT到底能做什么呢?

1、熟练掌握ChatGPT提示词技巧及各种应用方法&#xff0c;并成为工作中的助手。 2、通过案例掌握ChatGPT撰写、修改论文及工作报告&#xff0c;提供写作能力及优化工作 3、熟练掌握ChatGPT融合相关插件的应用&#xff0c;完成数据分析、编程以及深度学习等相关科研项目。 4、…

批量修改文件名-txt_word_ppt批量修改文件名

word/excel/ppt等等批量修改文件名批量修改文件名的方法有N多种,我的这种是比较简单的,小白也可以使用使用windows自带的批处理脚本进行批量重命名什么类型的文件批量修改原理都一样,这里以txt修改为例 1.创建文件测试 通过py脚本快速创建文件测试,这步是创建100个txt文件,这…

【开源】基于JAVA的数据可视化的智慧河南大屏

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 A4.2 数据模块 B4.3 数据模块 C4.4 数据模块 D4.5 数据模块 E 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数据可视化的智慧河南大屏&#xff0c;包含了GDP、…

自动化测试框架pytest系列之21个命令行参数介绍(二)

第一篇 &#xff1a; 自动化测试框架pytest系列之基础概念介绍(一)-CSDN博客 接上文 3.pytest功能介绍 3.1 第一条测试用例 首先 &#xff0c;你需要编写一个登录函数&#xff0c;主要是作为被测功能&#xff0c;同时编写一个测试脚本 &#xff0c;进行测试登录功能 。 登…

java基础课后习题答案

文章目录 第1章 Java开发入门第2章 Java编程基础第3章 面向对象&#xff08;上&#xff09;第4章 面向对象&#xff08;下&#xff09;第5章 异常第6章 Java API第7章 集合类第8章 泛型第9章 反射第10章 IO&#xff08;输入输出&#xff09;第11章 JDBC第12章 多线程第13章 网络…

Go语言的垃圾回收器

1. 简介 Go语言的垃圾回收器&#xff08;GC&#xff09;是一个自动内存管理系统&#xff0c;它可以自动回收不再使用的内存。GC可以帮助程序员避免内存泄漏和内存错误&#xff0c;从而提高程序的稳定性和可靠性。 2. GC的工作原理 Go语言的GC使用标记-清除算法来回收内存。标…

GBASE南大通用ExecuteScalar 方法

GBASE南大通用执行查询&#xff0c;并返回查询结果集的一行的第一列&#xff0c;忽略其余的行和列 。  语法 [Visual Basic] Public Overrides Function ExecuteScalar As Object [C#] public override Object ExecuteScalar()  返回值 执行查询&#xff0c;并返回查…

超级计算集群

超级计算集群&#xff08;Supercomputing Cluster&#xff09;是一种集成大量高性能计算节点、高速互联网络以及高效能存储系统的计算机系统&#xff0c;用于解决科学、工程、商业等领域中需要极端计算能力的问题。这些集群通常由成百上千甚至上万台服务器组成&#xff0c;通过…

经典网络面试题(1)

1&#xff1a;TCP 是面向字节流的协议&#xff0c;UDP 是面向报文的协议&#xff1f;这里的「面向字节流」和「面向报文」该如何理解。 操作系统对 TCP 和 UDP 协议的发送方的机制不同&#xff0c;也就是问题原因在发送方 &#xff1a;用户消息通过 UDP 协议传输时&#xff0c…

js Number类型常用数据操作方法汇总

取余 50%62 //可用场景 判断是否能被整除 console.log(50%5 0)//true console.log(50%6 0)//false取整 Math.floor()//向下取整; 不管小数是多少&#xff0c;都是向下 Math.floor(56.9)//56Math.round()//根据第一位小数大小&#xff0c;四舍五入取整 Math.round(56.4)//5…