详解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 相关文章推荐
文本加密解密
Jun 23 Javascript
Js点击弹出下拉菜单效果实例
Aug 12 Javascript
javascript计时器事件使用详解
Jan 07 Javascript
jquery插件ajaxupload实现文件上传操作
Dec 09 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
Aug 22 Javascript
Nuxt.js SSR与权限验证的实现
Nov 21 Javascript
微信小程序带动画弹窗组件使用方法详解
Nov 27 Javascript
Layui实现带查询条件的分页
Jul 27 Javascript
vue图片加载失败时用默认图片替换的方法
Aug 29 Javascript
layui多iframe页面控制定时器运行的方法
Sep 05 Javascript
Vue实现验证码功能
Dec 03 Javascript
利用js实现简易红绿灯
Oct 15 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
杏林同学录(一)
2006/10/09 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
javascript校验价格合法性实例(必须输入2位小数)
2014/05/05 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
python 控制语句
2011/11/03 Python
python简单猜数游戏实例
2015/07/09 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
python中列表和元组的区别
2017/12/18 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
优秀生推荐信范文
2013/11/28 职场文书
铁路安全事故反思
2014/04/26 职场文书
信息技术课后反思
2014/04/27 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
销售人才自我评价范文
2014/09/27 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
详解MySQL的内连接和外连接
2023/05/08 MySQL