ECMAScript 6 函数扩展.pdfVIP

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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 }) {

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档