JS 语法之--函数,异常

摘要:
18constsum=function_Sum{19ifreturn;//退出条件20return+_Sum(--n)21}22console日志函数、匿名函数和函数表达式之间的区别:函数和匿名函数本质上是相同的,它们都是函数对象,只是函数有自己的标识符——函数名。匿名函数需要使用其他标识符。不同的是,函数是由胡胜明改进的,而函数表达式不是。3高阶函数高阶函数:函数用作参数或返回函数以完成计数器:闭包用于完成映射函数,它可以对数组的元素执行一些处理。

1、函数

JS 语法之--函数,异常第1张

2、函数表达式

使用表达式定义函数,表达式中的函数名可以省略,如果这个函数名不省略,也只能用在此函数内部。

测试:匿名函数 + 函数表达式

1 //匿名函数
2 const add = function(x, y) {
3     return x +y;
4 };
5 console.log(typeof(add)) // function
6 console.log(add(4, 5))
7 
8 //有名字的函数表达式
9 const sub = functionfn(x, y) {
10     return x -y
11 }
12 
13 console.log(sub(6, 9))
14 //console.log(fn(4, 6))// 报错,undefined ,不能再外面是使用
15 
16 
17 //内部使用,就是自己调用自己,就是递归。
18 const sum = function_sum(n) {
19     if(n===1) return n;//退出条件
20     return n + _sum(--n)
21 }
22 console.log(sum(4))

函数,匿名函数,函数表达式的差异:

函数和匿名函数,本质上都是一样的,都是函数对象,只不过函数有自己的标识符--函数名,匿名函数需要借助其他的标识符而已,

区别在于,函数胡声明提升,函数表达式不会

JS 语法之--函数,异常第2张

3、高阶函数

高阶函数:函数作为参数或返回一个函数

完成一个计数器:利用了闭包

JS 语法之--函数,异常第3张

完成一个map函数,可以对某一个数组的元素进行某种处理。

JS 语法之--函数,异常第4张

map的生成器实现.

JS 语法之--函数,异常第5张

JS 语法之--函数,异常第6张

计数器的生成器版本:

JS 语法之--函数,异常第7张

4、箭头函数

箭头函数就是匿名函数,它是一种更加精简的格式

将上例中函数更改为箭头函数:

JS 语法之--函数,异常第8张

箭头函数参数

如果一个函数没有参数,使用(): () => 3

如果只有一个参数,参数列表可以省略小括号()

多个参数,不能省略,且用逗号分隔

箭头函数返回值

如果函数体部分有多行,就需要使用{} ,如果有返回值,使用return

如果只有一行语句,可以同时省略大括号和return

只要有return语句,就不能省略大括号

如果只有一条非return 语句,加上大括号,函数就成了无返回值了

如: console.log(map[1,2,3,4], x=> {x*2}))

加上大括号,它就不等价 x => {return x*2}

因此x => x*2 这种正确形式就行了

5、函数参数:

普通参数

一个参数占一个位置,支持默认参数

测试:

1 const add = (x, y) => x +y
2 console.log(add(4, 5)) //9
3 console.log('=====================')
4 
5 const add1 = (x, y=5) => x +y
6 console.log(add1(4,6)) //10
7 console.log(add1(4)) //9
8 console.log('=====================')
9 
10 const add2 = (x=6, y) => {console.log(x, y); return x +y}
11 console.log(add2())
12 console.log(add2(1))
13 console.log(add2(a=2,b=3)) //在JS 中表达式是有值的,也就是 a=2 有两个意思,a的值是2,此处表达式的值也是2
14 console.log('=====================')
15 
16 const add3 = (x=6, y) => x +y
17 console.log(add3(1,2,3,4,5,6,7))
18 console.log('=====================')
19 const add4 = (x=6,z, y=4) => x +y
20 console.log(add4(1,2,3,4,5,6,7))
21 
22 /**
23  * 在JS中没有关键字传参,
24  * JS 只是做参数位置的对应
25  * JS并不限制默认参数的位置 python中,关键字传参只能在位置传参之后)
26  * 传入的参数多了,自动截断
27  */

结果:

Info: Start process (17:02:16)
9
=====================
10
9
=====================
6undefined
NaN
1undefined
NaN
2 3
5
=====================
3
=====================
4Info: End process (17:02:17)

可变参数(rest parameters 剩余参数)

JS 使用... 表示可变参数

JS 语法之--函数,异常第9张

arguments 对象

函数的所有参数会被保存在一个arguments 的兼职对字典对象中

JS 语法之--函数,异常第10张

ES6 之前,arguments 是唯一可变参数的实现

ES6 开始,不推荐使用,建议使用可变参数,

注:使用箭头函数,取到的arguments 不是我们想要的

JS 语法之--函数,异常第11张

参数解构

JS 语法之--函数,异常第12张

JS 语法之--函数,异常第13张

JS 支持参数解构,不需要解构后的值个数,和参数个数对应

函数返回值

JS 语法之--函数,异常第14张  

表达式的值:

类C 的语言,都有一个概念, -------表达式的值

赋值表达式的值:等号右边的值

逗号表达式的值 :类C 语言,都支持逗号表达式,逗号表达式的值,就是最后一个表达式的值

JS 返回值依旧是一个值

作用域:

之前已经说明,但是注意一点,如何使用 “严格模式”

最当前.js 文件最上方 写: use strict ,这样 本脚本中,只要出现 x = 3 隐式声明,可能就会报错 

JS 语法之--函数,异常第15张

6、异常:

抛出异常:

JS 的异常语法和java 相同,使用throw 关键字抛出

使用throw 关键字可以抛出任意对象的异常

JS 语法之--函数,异常第16张

这点不同 Python,python只能跑Exceptions中的异常

捕获异常:

try {} catch {} 异常捕获语句

try {} catch {} finally {} finally 最终会执行

注意这里的catch 不支持类型,也就是说至多一个catch 语句,可以在catch的语句块内,自行处理异常

这也是跟 python不同之处。

JS 语法之--函数,异常第17张

免责声明:文章转载自《JS 语法之--函数,异常》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇工具infer,静态代码检测 zeroPhpStorm插件之Api Debugger下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js 获取地址第1个斜杠后的内容或地址前一部分

var value = "https://www.baidu.com/20210922/95b22ab5034b2d0f.jpg";const str = value.split("https://"); //https://进行分割, const index = str[1].indexOf("/")+1; //indexOf 获取第一个斜杠的索引,co...

JS倒计时,不会重复执行

直接上代码,亲自测试了的,没问题咯 第一种是按钮上直接显示倒计时, <html> <head> <title>点击获取验证码按钮后按钮变灰,倒计时一段时间后又可重复点击</title> <script type="text/javascript" src="http://apps.bdimg.co...

js上传文件 java后台接收文件

HTML 代码: <div class="input-chunk"> <div>输入文件:</div> <input type="file"value="选择文件"id="upload-file"> <br> <a id="start-upl...

js 时间戳转换为‘yyyy-MM-dd hh:mm’格式(es6语法)

function formatDate(date,fmt) { if(/(y+)/.test(fmt)){ fmt = fmt.replace(RegExp.$1,(date.getFullYear()+'').substr(4-RegExp.$1.length)); } let o = { 'M+':date.getMonth...

如何在CentOS 7上安装Node.js和npm

Node.js是一个跨平台的JavaScript运行时环境,允许在服务器端执行JavaScript代码。Node.js主要用于后端,但也作为全栈和前端解决方案而流行。 npm,Node软件包管理器的缩写,是Node.js的默认软件包管理器,也是用于发布开源Node.js软件包的世界上最大的软件存储库。 本文引导完成在CentOS 7计算机上安装Node....

js 添加天数

//日期加上天数得到新的日期 //dateTemp 需要参加计算的日期,days要添加的天数,返回新的日期,日期格式:YYYY-MM-DD function getNewDay(dateTemp, days) { var dateTemp = dateTemp.split("-"); var nDate = new...