详解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之卸载鼠标事件的代码
May 14 Javascript
js获取当前月的第一天和最后一天的小例子
Nov 18 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
May 19 Javascript
原生javascript实现拖动元素示例代码
Sep 01 Javascript
1秒50万字!js实现关键词匹配
Aug 01 Javascript
总结JavaScript的正则与其他语言的不同之处
Aug 25 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
Dec 13 Javascript
JavaScript解析任意形式的json树型结构展示
Jul 23 Javascript
JavaScript闭包的简单应用
Sep 01 Javascript
详谈js原型继承的一些问题
Sep 06 Javascript
Vuex入门到上手教程
Jun 20 Javascript
详解javascript void(0)
Jul 13 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
织梦模板标记简介
2007/03/11 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
PHP实现图片压缩
2020/09/09 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
js中关于一个分号的崩溃示例
2013/11/11 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
利用prop-types第三方库对组件的props中的变量进行类型检测
2017/05/02 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
Python实现感知机(PLA)算法
2017/12/20 Python
python numpy元素的区间查找方法
2018/11/14 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
opencv3/C++ 平面对象识别&透视变换方式
2019/12/11 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
python中return不返回值的问题解析
2020/07/22 Python
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
《狐假虎威》教学反思
2014/02/07 职场文书
植树节标语
2014/06/27 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技