在JavaScript的世界中函数被誉为一等公民,每当咱们须要在JS定义一个新的函数,咱们都会坚决果断的function() {}
,也许咱们能够开始换一种方式来定义一个函数,也就是本文的主角箭头函数,一个来自ECMAScript 2015(又称ES6)的全新特性。es6
var func = p => p
上面的代码等价于函数
var func = function(p) { return p }
看出差别了么?最明显的,咱们再也不须要写function
这个关键字,只要使用=>
箭头便可定义一个函数。咱们在定义函数的时候根据根据需求的不一样,箭头函数也有一些细微的差别,咱们来列举一下:this
若是箭头函数不须要参数或须要多个参数,就使用一个圆括号表明参数部分。code
// 无参函数 var func1 = () => 1 // 多参(大于1)函数 var func2 = (a, b) => a + b
若是箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,而且使用return语句返回。对象
// 不须要显示return var func = p => p // 须要大括号而且显示return var func p => { var a = p + 1 return a }
箭头函数除了让咱们少写几个字母外难道没有更牛逼的特性?必须不是!下面咱们来介绍一个牛逼闪闪的特性:父做用域共享关键字this。ip
JavaScript中的this
作为一个古老的特性,有一个很是坑爹的特性this
永远指向的是当前函数的上下文作用域
document.addEventListener('click', function() { setTimeout(function() { console.log(this) // ? }) }, false)
在运行上面代码时,this
指向的是什么呢?答案是window,缘由是setTimeout
是window
对象下的一个方法。可是咱们此时但愿的是获取到document,怎么解决呢,传统的办法是添加一个变量self
保持对this的引用。get
document.addEventListener('click', function() { var self = this; setTimeout(function() { console.log(self) // self => document }) }, false)
可是这种方法显示不够优雅,这个时候咱们就能够利用箭头函数来解决它,由于它不产生属于它本身的this
。io
document.addEventListener('click', function() { var self = this; setTimeout(() => { console.log(this) // this => document }) }, false)
箭头函数有几个使用注意点:console
不可使用arguments对象,该对象在函数体内不存在。若是要用,能够用解构参数代替。
不能够看成构造函数,也就是说,不可使用new命令,不然会抛出一个错误。
不可使用yield命令,所以箭头函数不能用做Generator函数。
箭头函数应该是咱们在ES6中使用最多的,也是我最喜欢的特性之一,箭头函数使得表达更加简洁。当第一眼看到它的写法时,就被它的优雅所吸引,建议你们多多尝尝ES6的各类新特性。