详解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 相关文章推荐
tagName的使用,留一笔
Jun 26 Javascript
LBS blog sql注射漏洞[All version]-官方已有补丁
Aug 26 Javascript
js将long日期格式转换为标准日期格式实现思路
Apr 07 Javascript
分析js闭包引起的事件注册问题
Mar 29 Javascript
jQuery实现select模糊查询(反射机制)
Jan 14 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
Feb 09 Javascript
超简单的Vue.js环境搭建教程
Mar 17 Javascript
Angular中的interceptors拦截器
Jun 25 Javascript
vuex actions异步修改状态的实例详解
Nov 06 Javascript
vue el-table实现行内编辑功能
Dec 11 Javascript
图解JS原型和原型链实现原理
Sep 15 Javascript
vue中利用three.js实现全景图的完整示例
Dec 07 Vue.js
手机端点击图片放大特效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
php修改文件上传限制方法汇总
2015/04/07 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
javascript中的事件代理初探
2014/03/08 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
Vue多选列表组件深入详解
2021/03/02 Vue.js
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
Python 性能优化技巧总结
2016/11/01 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
Python-opencv实现红绿两色识别操作
2020/06/04 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
销售顾问的岗位职责
2013/11/13 职场文书
模特大赛策划方案
2014/05/28 职场文书
我爱祖国演讲稿
2014/09/02 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
英文自荐信范文
2015/03/25 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书