详解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来生成ftp脚本的小例子
Jul 03 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
Mar 09 Javascript
对Web开发中前端框架与前端类库的一些思考
Mar 27 Javascript
详解Javacript和AngularJS中的Promises
Feb 09 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
Jul 10 Javascript
jQuery使用Layer弹出层插件闪退问题
Dec 22 Javascript
基于angular实现模拟微信小程序swiper组件
Jun 11 Javascript
微信小程序 自定义消息提示框
Aug 06 Javascript
vue如何集成raphael.js中国地图的方法示例
Aug 15 Javascript
vue-cli中打包图片路径错误的解决方法
Oct 26 Javascript
ES6 javascript的异步操作实例详解
Oct 30 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
Sep 28 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
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
PHP无刷新上传文件实现代码
2011/09/19 PHP
phpmail类发送邮件函数代码
2012/02/20 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
Vue中用props给data赋初始值遇到的问题解决
2018/11/27 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
Python读写操作csv和excle文件代码实例
2020/03/16 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
如何查看python关键字
2021/01/17 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
Why we need EJB
2016/10/20 面试题
银行财务部实习生的自我鉴定
2013/11/27 职场文书
建筑班组长岗位职责
2014/01/02 职场文书
2014年会演讲稿范文
2014/01/06 职场文书
会计大学生职业生涯规划书范文
2014/01/13 职场文书
审计主管岗位职责
2014/01/31 职场文书
法学专业毕业生求职信
2014/06/12 职场文书
村党支部对照检查材料思想汇报
2014/09/28 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
MySQL 条件查询的常用操作
2022/04/28 MySQL