- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ECMAScript 6 函数的扩展
函数参数的默认值
基本⽤法
在ES6之前,不能直接为函数的参数指定默认值,只能采⽤变通的⽅法。
function log(x, y) {
y = y || World;
console.log(x, y);
}
log(Hello) // Hello World
log(Hello, Chin ) // Hello Chin
log(Hello, ) // Hello World
上⾯代码检 函数log的参数y有没有赋值,如果没有,则指定默认值为World。这
种写法的缺点在于,如果参数y赋值了,但是对应的布尔值为f lse,则该赋值不起
作⽤。就像上⾯代码的最后⼀⾏,参数y等于空字符,结果被改为默认值。
为了避免这个问题,通常需要先判断⼀下参数y是否被赋值,如果没有,再等于默认
值。
if (typeof y === undefined) {
y = World;
}
ES6允许为函数的参数设置默认值,即直接写在参数定义的后⾯。
function log(x, y = World) {
console.log(x, y);
}
log(Hello) // Hello World
log(Hello, Chin ) // Hello Chin
log(Hello, ) // Hello
可以看到,ES6的写法⽐ES5简洁许多,⽽且⾮常⾃然。下⾯是另⼀个例⼦。
function Point(x = 0, y = 0) {
this.x = x;
this.y = y;
}
v r p = new Point();
p // { x : 0, y : 0 }
除了简洁,ES6的写法还有两个好处:⾸先,阅读代码的⼈,可以⽴刻意识到哪些参
数是可以省略的,不⽤ 看函数体或⽂档;其次,有利于将来的代码优化,即使未来
的版本在对外接⼜中,彻底拿掉这个参数,也不会导致以前的代码⽆法运⾏。
参数变量是默认声明的,所以不能⽤let或const再次声明。
function foo(x = 5) {
let x = 1; // error
const x = 2; // error
}
上⾯代码中,参数变量x是默认声明的,在函数体中,不能⽤let或const再次声
明,否则会报错。
与解构赋值默认值结合使⽤
参数默认值可以与解构赋值的默认值,结合起来使⽤。
function foo({x, y = 5}) {
console.log(x, y);
}
foo({}) // undefined, 5
foo({x : 1}) // 1, 5
foo({x : 1, y : 2}) // 1, 2
foo() // TypeError: C nnot re d property x of undefined
上⾯代码使⽤了对象的解构赋值默认值,⽽没有使⽤函数参数的默认值。只有当函
数foo的参数是⼀个对象时,变量x和y才会通过解构赋值⽽⽣成。如果函数foo调⽤
时参数不是对象,变量x和y就不会⽣成,从⽽报错。如果参数对象没有y属性,y的
默认值5才会⽣效。
下⾯是另⼀个对象的解构赋值默认值的例⼦。
function fetch(url, { body = , method = GET , he ders = {} })
console.log(method);
}
fetch(http://ex , {})
// GET
fetch(http://ex )
// 报错
上⾯代码中,如果函数fetch的第⼆个参数是⼀个对象,就可以为它的三个属性设置
默认值。
上⾯的写法不能省略第⼆个参数,如果结合函数参数的默认值,就可以省略第⼆个参
数。这时,就出现了双重默认值。
function fetch(url, { method = GET } = {}) {
console.log(method);
}
fetch(http://ex )
// GET
上⾯代码中,函数fetch没有第⼆个参数时,函数参数的默认值就会⽣效,然后才是
解构赋值的默认值⽣效,变量method才会取到默认值GET。
再请问下⾯两种写法有什么差别?
// 写法⼀
function m1({x = 0, y = 0} = {}) {
return [x, y];
}
// 写法⼆
function m2({x, y} = { x : 0, y : 0 }) {
您可能关注的文档
- C语言 变量的存储属性与预编译命令.ppt
- C语言_源代码-IAP在应用中编程和其应用.pdf
- c语言-菜单工具栏及状态栏.ppt
- c语言程序设计及项目实践第11章.ppt
- C语言程序设计教程 第8篇.ppt
- C语言学习 第3篇 口令验证模块的开发.ppt
- D90关于个人设定菜单设置问题.doc
- DB2_数据库安装for_AIX.pdf
- DB第3篇 关系数据库标准语言SQL.ppt
- DC升级工具(传送与PTN)培训胶片.ppt
- 2025年家居家纺商业计划书线上线下融合下的市场拓展策略.docx
- 2025年农业绿色发展政策支持与农业循环经济发展政策优化创新优化报告.docx
- 教育精准扶贫对农村地区教育投入结构优化的影响评估报告.docx
- 医疗美容行业监管政策对美容护肤品牌的影响与2025年市场策略分析报告.docx
- 纺织服装制造行业数字化转型中的政策环境与法规解读报告.docx
- 农业科技成果转化与农村旅游开发2025年报告.docx
- 2025年城市河道生态修复项目组织管理建议书.docx
- 农村电商服务站农产品电商平台用户行为分析与产品创新报告.docx
- 医疗美容服务行业规范化背景下,2025年市场监管法规解读与应用.docx
- 航空运输业2025年疫情冲击应对策略与可持续发展研究报告.docx
文档评论(0)