当前位置: 首页 > news >正文

谈谈神秘的ES6——(三)ES6的函数

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

谈谈神秘的ES6——(三)ES6的函数

 ES6函数的改变不算太大,都是一些其他语言早就有的功能,而Javascript一直比较欠缺的,比如函数参数默认值,任意参数的表示法,最大的变化应该是支持箭头函数(其他语言称之为LAMBDA表达式),一种对匿名函数的一种简写方式。

箭头函数()=>{}

箭头函数的本质是方法函数的一种简写,不需要function关键字来创建函数,它可以省略return关键字,当只有一个参数是,可以省略(),如果只有一个return,可以省略{}。具体来看看代码:

function square(n){
    return n*n;
}

//等价于

let square = n => n*n;

默认参数

在ES5我们给函数定义参数默认值是怎么样?

function action(num) {
   num = num || 200
   //当传入num时,num为传入的值
   //当没传入参数时,num即有了默认值200
   return num
}

但当,num传入为0的时候就是false, 此时num = 200 与我们的实际要的效果明显不一样。

ES6为参数提供了默认值。在定义函数时便初始化了这个参数,以便在参数没有被传递进去时使用。

function action(num = 200) {
    console.log(num)
}
action() //200
action(300) //300

不定参数(Rest Parameter)

在函数命名参数前添加...三个点表明这是一个不定参数。

这是一个类似C#的params object参数,放在最后一个形参,用来收集剩余的参数。

function pick(obj, ...keys) {
  let result = Object.create(null)
  for (let i = 0, len = keys.length; i < len; i++) {
    result[keys[i]] = object[keys[i]]
  }
  return result
}

其实,它还可以用来展开数组,我们来看一下:

Math.max可接受任意数量的参数并返回最大的那个,但如果传入的是一个数组,则只能使用apply。

console.log(Math.max(11, 2, 3, 12, 43, 904, 3543, 43))
let values = [11, 2, 3, 12, 43, 904, 3543, 43]
console.log(Math.max.apply(Math, values))

使用展开运算符就变得特别简单了。

let values = [11, 2, 3, 12, 43, 904, 3543, 43]
console.log(Math.max(...values))

                                                                                                       

如果想跟着振丹继续学习,可以微信关注【振丹敲代码】(微信号:JandenCoding)

新博文微信同步推送,还附有讲解视频哦~

也可直接扫描下方二维码关注。

转载于:https://my.oschina.net/JandenMa/blog/1919117

相关文章:

  • 思科单臂路由配置
  • 资深架构师: 推荐高薪架构学习路线
  • memcache的安装
  • 缓存更新的套路
  • 在客户端正确的关闭WCF连接! zt
  • 公司ERP服务器中勒索病毒原因事后分析
  • 关于I/O上下拉电阻的应用总结
  • babylonjs
  • 列表的基本操作元组
  • Mysql GRANT 添加用户
  • RocksDB介绍
  • poj 2777 Count Color(线段树区间更新)
  • 基础正则表达式
  • binlog2sql 回滚误操作
  • Dynamic Properties in PHP and StdClass
  • 时间复杂度分析经典问题——最大子序列和
  • download使用浅析
  • Elasticsearch 参考指南(升级前重新索引)
  • Java比较器对数组,集合排序
  • log4j2输出到kafka
  • MD5加密原理解析及OC版原理实现
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • spring cloud gateway 源码解析(4)跨域问题处理
  • springMvc学习笔记(2)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 记录一下第一次使用npm
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 小程序测试方案初探
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • ​Python 3 新特性:类型注解
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #1014 : Trie树
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (ZT)出版业改革:该死的死,该生的生
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (强烈推荐)移动端音视频从零到上手(上)
  • (五)关系数据库标准语言SQL
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转载)利用webkit抓取动态网页和链接
  • .jks文件(JAVA KeyStore)
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET4.0并行计算技术基础(1)
  • .NET6实现破解Modbus poll点表配置文件
  • .Net中的设计模式——Factory Method模式
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @Conditional注解详解
  • @Data注解的作用
  • @ModelAttribute注解使用
  • @Transaction注解失效的几种场景(附有示例代码)