当前位置:网站首页>Detailed explanation of new features of ES advanced function syntax
Detailed explanation of new features of ES advanced function syntax
2022-08-11 02:25:00 【ZWZhangYu】
函数参数的默认值
ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面.
// 函数默认参数值
function fun1(name, sex = "男") {
return [name, sex]
}
console.log(fun1("Alice"))
通常情况下,定义了默认值的参数,应该是函数的尾参数.因为这样比较容易看出来,到底省略了哪些参数.如果非尾部的参数设置默认值,实际上这个参数是没法省略的.
函数的 length 属性
指定了默认值以后,函数的length属性,将返回没有指定默认值的参数个数.这个表示默认参数不作为length的计算范围.
// 函数的length属性
function fun2(a, b, c = 0) {
}
function fun3(c = 0) {
}
console.log(fun2.length) // 2
console.log(fun3.length) // 0
rest 参数
ES6 引入 rest 参数(形式为…变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了.rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中.
// REST参数
function func4(...args) {
for (let arg of args) {
console.log(arg)
}
}
func4("参数1", "参数2", "参数3")
name 属性
函数的name属性,返回该函数的函数名.
function foo() {
}
foo.name // "foo"
箭头函数
ES6 允许使用“箭头”(=>)定义函数.作为一个熟悉JAVA的开发者来说,其使用和JAVA8的Lambda还是非常相似的,也更容易上手.
// 箭头函数
let fun = v => v + " world!"
console.log(fun("hello"))
//等价于
function fun5(v) {
return v + " world!"
}
如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分.如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回.如果箭头函数直接返回一个对象,必须在对象外面加上括号.
// 无参数
let fun6 = () => 1 + 1
console.log("fun6===" + fun6())
// 多个参数
let fun7 = (a, b) => a + b
console.log("fun7===" + fun7(1, 2))
// 方法体多行
let fun8 = (a, b) => {
a++
b++
return a + b
}
console.log("fun8===" + fun8(1, 2))
// 返回值是对象
let fun9 = (a, b) => {
a++
b++
return {
c: a + b,
d: a - b
}
}
console.log("fun9===" + fun9(1, 2).c)
let fun10 = (a, b) => ({
c: a + b, d: a - b})
console.log("fun10===" + fun10(1, 2).c)
箭头函数的this分析
箭头函数没有自己的this对象.对于普通函数来说,内部的this指向函数运行时所在的对象,但是这一点对箭头函数不成立.它没有自己的this对象,内部的this就是定义时上层作用域中的this.也就是说,箭头函数内部的this指向是固定的,相比之下,普通函数的this指向是可变的.
Function.prototype.toString()
之前执行方法的toString()方法返回函数代码本身,但是会省略注释和空格.ES2019 对函数实例的toString()方法做出了修改,修改后的toString()方法,明确要求返回一模一样的原始代码.
/**
* 测试
*/
function /*** 测试*/ fun11() {
return "1"
}
console.log(fun11.toString())
这个也会返回方法内部的内容,但是这个注释的返回并不友好,一般很少会把注释写在这个位置.
catch 命令的参数省略
JavaScript 语言的try…catch结构,以前明确要求catch命令后面必须跟参数,接受try代码块抛出的错误对象.
try {
// ...
} catch (err) {
// 处理错误
}
ES2019 做出了改变,允许catch语句省略参数.
try {
// ...
} catch {
// ...
}
边栏推荐
- OptiFDTD应用:用于光纤入波导耦合的硅纳米锥仿真
- Logstash日志数据写入异常排查问题总结
- Fatal error in launcher: Unable to create process using xxx --logdir logs(tensorboard使用)
- comp3331-9331-21t1-midterm复习
- Research on the Application of Privacy Computing Fusion
- Detailed explanation of common methods of filtering matrix (array) elements in Matlab
- YTU 2418: C语言习题 矩阵元素变换
- 软件测试面试题:在频繁的版本发布中,如何回归测试?
- 经典面试题 之 GC垃圾收集器
- 从键入网址到网页显示的详细过程
猜你喜欢
MySQL八股文背诵版(续)
This Thursday evening at 19:00, Lesson 5 of the sixth phase of knowledge empowerment丨OpenHarmony WiFi subsystem
[Detailed explanation of C data storage] (1) - in-depth analysis of the storage of shaping data in memory
【C 数据存储详解】(1)——深度剖析整形数据在内存中的存储
惨遭面试官吊打高并发系统设计,回来学习 2400 小时后成功复仇
OpenCV创始人:开源绝不能完全免费!
一次简单的 JVM 调优,拿去写到简历里
ROS源代码阅读(1)
报错处理:org.xml.sax.SAXParseException: 不允许有匹配 “[xX][mM][lL]“ 的处理指令目标
深度学习-第二次
随机推荐
ARM开发(四)新手小白如何阅读芯片手册,裸机驱动开发步骤以及纯汇编实现点灯,汇编结合c点灯,c实现点灯
八.数据的存储
基于FPGA状态机的自动售货机功能实现
Js prototype and prototype chain and prototype inheritance
Detailed explanation of common methods of filtering matrix (array) elements in Matlab
SyntaxError: invalid syntax
Inter-process communication method (2) Named pipe
comp3331-9331-21t2-midterm复习
Docker 链接sqlserver时出现en-us is an invalid culture错误解决方案
软件测试面试题:验收测试包括哪三种类型?
Mysql_Note3
惨遭面试官吊打高并发系统设计,回来学习 2400 小时后成功复仇
[Detailed explanation of C data storage] (1) - in-depth analysis of the storage of shaping data in memory
阿里亿级并发册 + 机器学习算法 + 面试册 + 优化册 + 代码册 笔记!!!
Mysq_Note4
YTU 2411: 谁去参加竞赛?【简单循环】
Fatal error in launcher: Unable to create process using xxx --logdir logs(tensorboard使用)
数论基础-整除(编程例题)
Engineering Design of Single-sided PCB Routing Impedance
Geogebra 教程之 04 Geogebra 小程序