详解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 函数调用规则
Sep 14 Javascript
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
Nov 12 Javascript
javascript结合ajax读取txt文件内容
Dec 05 Javascript
JavaScript中调用函数的4种方式代码实例
Jul 08 Javascript
微信小程序 基础组件与导航组件详细介绍
Feb 21 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
Apr 01 Javascript
React Native 集成jpush-react-native的示例代码
Aug 16 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
Sep 13 Javascript
JavaScript读写二进制数据的方法详解
Sep 09 Javascript
vue父子组件间引用之$parent、$children
May 20 Javascript
微信小程序实现发微博功能的示例代码
Jun 24 Javascript
node.js爬虫框架node-crawler初体验
Oct 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
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
Smarty缓存机制实例详解【三种缓存方式】
2019/07/20 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
对xmlHttp对象的理解
2011/01/17 Javascript
仿中关村在线首页弹出式广告插件(jQuery版)
2012/05/03 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
jquery map方法使用示例
2014/04/23 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
小程序如何获取多个formId实现详解
2019/09/20 Javascript
详解Python的Lambda函数与排序
2016/10/25 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
tensorflow实现简单逻辑回归
2018/09/07 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
高中生毕业自我鉴定
2013/10/10 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL