ES6 箭头函数

218 阅读1分钟

一、定义:

箭头函数比较适用于原本需要匿名函数的地方,比如用在数组内置方法map、filter、forEach、reduce的回调函数中。

var elements = [
  'Hydrogen',
  'Helium',
  'Lithium',
  'Beryllium'
];

elements.map(function(element) { 
  return element.length; 
}); // 返回数组:[8, 6, 7, 9]

// 上面的普通函数可以改写成如下的箭头函数
elements.map((element) => {
  return element.length;
}); // [8, 6, 7, 9]

二、特点:

1、无构造函数与原型链

2、不用指定this,箭头函数体内的 this 对象,就是定义时所在的对象,而不是使用时所在的对象。

一、基础语法:

//一般语法:
(参数1, 参数2, …, 参数N) => { 函数声明 }

//相当于:(参数1, 参数2, …, 参数N) =>{ return 表达式; }
(参数1, 参数2, …, 参数N) => 表达式(单一)

// 当只有一个参数时,圆括号是可选的:
(单一参数) => {函数声明}
单一参数 => {函数声明}

// 没有参数的函数应该写成一对圆括号
() => {函数声明}

//加括号的函数体返回对象字面表达式:
参数=> ({foo: bar})

//支持剩余参数和默认参数
(参数1, 参数2, ...rest) => {函数声明}
(参数1 = 默认值1,参数2, …, 参数N = 默认值N) => {函数声明}

//同样支持参数列表解构
let f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c;
f();  // 6

二、使用**:**

1. 箭头函数不能用new

var Person = (name, age) => {    
    this.name = name    
    this.age = age
}
var p = new Func('John', 33) // error

2、不能使用argument

var func = () => {
    console.log(arguments)
}
func(55) //Uncaught ReferenceError: arguments is not defined
    at func (<anonymous>:2:17) 

3. typeof运算符和普通的function一样,instanceof也返回true,表明也是Function的实例

var func = a => a
console.log(typeof func); // "function"
console.log(func instanceof Function); // true