详解Javascript ES6中的箭头函数(Arrow Functions)


Posted in Javascript onAugust 24, 2016

ES6可以使用“箭头”(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器)。

一、语法

1. 具有一个参数的简单函数

var single = a => a
single('hello, world') // 'hello, world'

2. 没有参数的需要用在箭头前加上小括号

var log = () => {
 alert('no param')
}

3. 多个参数需要用到小括号,参数间逗号间隔,例如两个数字相加

var add = (a, b) => a + b
add(3, 8) // 11

4. 函数体多条语句需要用到大括号

var add = (a, b) => {
 if (typeof a == 'number' && typeof b == 'number') {
  return a + b
 } else {
  return 0
 }
}

5. 返回对象时需要用小括号包起来,因为大括号被占用解释为代码块了

var getHash = arr => {
 // ...
 return ({
  name: 'Jack',
  age: 33
 })
}

6. 直接作为事件handler

document.addEventListener('click', ev => {
 console.log(ev)
})

7. 作为数组排序回调

var arr = [1, 9 , 2, 4, 3, 8].sort((a, b) => {
 if (a - b > 0 ) {
  return 1
 } else {
  return -1
 }
})
arr // [1, 2, 3, 4, 8, 9]

二、注意点

1. typeof运算符和普通的function一样

var func = a => a
console.log(typeof func); // "function"

2. instanceof也返回true,表明也是Function的实例

console.log(func instanceof Function); // true

3. this固定,不再善变

obj = {
 data: ['John Backus', 'John Hopcroft'],
 init: function() {
  document.onclick = ev => {
   alert(this.data) // ['John Backus', 'John Hopcroft']
  }
  // 非箭头函数
  // document.onclick = function(ev) {
  //  alert(this.data) // undefined
  // }
 }
}
obj.init()

这个很有用,再不用写meself_this了,或者bind

4. 箭头函数不能用new

var Person = (name, age) => {
 this.name = name
 this.age = age
}
var p = new Func('John', 33) // error

5. 不能使用argument

var func = () => {
 console.log(arguments)
}
func(55) //

对于5,在Firefox36里测试是可以输出55的,貌似并没有这个限制

三、总结

以上就是关于ES6中箭头函数的全部介绍内容,希望对大家了ES6中的箭头函数能有所帮助。如果有疑问可以留言讨论。

Javascript 相关文章推荐
javascript同步Import,同步调用外部js的方法
Jul 08 Javascript
JavaScript 实现模态对话框 源代码大全
May 02 Javascript
jQuery取得select选择的文本与值的示例
Dec 09 Javascript
Javascript中浮点数相乘的一个解决方法
Jun 03 Javascript
动态读取JSON解析键值对的方法
Jun 03 Javascript
JavaScript判断变量是对象还是数组的方法
Aug 28 Javascript
jQuery表格插件datatables用法总结
Sep 05 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
Oct 16 Javascript
jQuery中cookie插件用法实例分析
Dec 04 Javascript
JS实现标签页切换效果
May 04 Javascript
基于Cookie常用操作以及属性介绍
Sep 07 Javascript
Vue实现移动端拖拽交换位置
Jul 29 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
Aug 24 #Javascript
jQuery Raty 一款不错的星级评分插件
Aug 24 #Javascript
jQuery实现自动输入email、时间和域名的方法
Aug 24 #Javascript
jQuery实现页面点击后退弹出提示框的方法
Aug 24 #Javascript
input 禁止输入特殊字符的四种实现方式
Aug 24 #Javascript
深入浅析JavaScript中的3DES
Aug 24 #Javascript
jQuery自适应轮播图插件Swiper用法示例
Aug 24 #Javascript
You might like
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
php简单获取复选框值的方法
2016/05/11 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
模仿jQuery each函数的链式调用
2009/07/22 Javascript
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
JS实现可改变列宽的table实例
2013/07/02 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
自定义事件解决重复请求BUG的问题
2017/07/11 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
Nodejs中的require函数的具体使用方法
2019/04/02 NodeJs
vue开发移动端底部导航条功能
2020/04/08 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
python调用cmd复制文件代码分享
2013/12/27 Python
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
大学生求职简历的自我评价
2013/10/21 职场文书
初中生期末考试的自我评价
2013/12/17 职场文书
《我的信念》教学反思
2014/02/15 职场文书
辞职信标准格式
2015/02/27 职场文书
Go timer如何调度
2021/06/09 Golang
Python常遇到的错误和异常
2021/11/02 Python
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技