详解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 相关文章推荐
几个比较经典常用的jQuery小技巧
Mar 01 Javascript
电子商务网站上的常用的js放大镜效果
Dec 08 Javascript
js bind 函数 使用闭包保存执行上下文
Dec 26 Javascript
jquery 循环显示div的示例代码
Oct 18 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
May 23 Javascript
AngularJS基础知识
Dec 21 Javascript
如何消除inline-block属性带来的标签间间隙
Mar 31 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
Jul 04 Javascript
JavaScript省市级联下拉菜单实例
Feb 14 Javascript
angularjs select 赋值 ng-options配置方法
Feb 28 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
Mar 07 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
Apr 01 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
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
2013/11/13 PHP
浅谈php自定义错误日志
2015/02/13 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
js动态修改表格行colspan列跨度的方法
2015/03/30 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
JavaScript获取各大浏览器信息图示
2015/11/20 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
浅谈Vue组件及组件的注册方法
2018/08/24 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
python单线程实现多个定时器示例
2014/03/30 Python
Python中字符编码简介、方法及使用建议
2015/01/08 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
儿科护士自我鉴定
2013/10/14 职场文书
优秀员工表扬信
2014/01/17 职场文书
美术国培研修感言
2014/02/12 职场文书
励志演讲稿300字
2014/08/21 职场文书
2016寒假假期总结
2015/10/10 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电