ES6标准新增了一种函数–箭头函数(Arrow Function),比较容易识记,因为它的定义用的就是一个箭头表示的。

主要从以下方面理解箭头函数:

  • 1.箭头函数的用法。
  • 2.箭头函数的语法。
  • 3.箭头函数的this问题。

箭头函数相当于匿名函数,并且简化了函数的定义。箭头函数有两种格式。

1.只包含一个表达式,{…}和return都省略掉了。如 x=>x*x

2.包含多条语句,此时不可省略{…}和return。

如:

x=>{
	if(x>0){
		return x*x;
	}else{
		return -x*y;
	}
}

1.箭头函数的用法

用法如下:

es6 async 箭头函数 es6箭头函数作用_es6 async 箭头函数

相当于es5的如下写法:

es6 async 箭头函数 es6箭头函数作用_箭头函数Arrow_02

由此可见,使用箭头函数可以简化js代码。

2.箭头函数语法

箭头函数根据参数个数的不同,语法也不同。

  • 1.无参数
    没有参数的箭头函数,需要在箭头前加上小括号。如下:
  • es6 async 箭头函数 es6箭头函数作用_作用域_03

  • 2.参数个数大于1
    参数个数大于1时,就需要用括号()括起来,如下是两位参数的情况。
  • es6 async 箭头函数 es6箭头函数作用_ES6_04

  • 3.可变参数
    函数体有多条语句时,需要使用大括号{}括起来。
    arr数组是可变的。
  • es6 async 箭头函数 es6箭头函数作用_作用域_05

  • 4.返回对象。
    箭头函数也可以返回对象,为了防止大括号{}被解释称代码块,和函数体的大括号有语法冲突,最好使用小括号包起来。如下:
  • es6 async 箭头函数 es6箭头函数作用_作用域_06

3.箭头函数的this理解

箭头函数与匿名函数最明显的区别的就是this的指向不同。

1.箭头函数内部的this指向是固定的,是词法作用域,由上下文确定。

2.匿名函数的this没有绑定作用域,可能指向window全局。

如下代码帮助理解。

ES5写法:

es6 async 箭头函数 es6箭头函数作用_ES6_07

单步调试如下:

es6 async 箭头函数 es6箭头函数作用_JavaScript_08

ES6会固定this的指向,写法如下:

es6 async 箭头函数 es6箭头函数作用_es6 async 箭头函数_09

调试如下:

es6 async 箭头函数 es6箭头函数作用_ES6_10

3.由于this在箭头函数中已经按照词法作用域绑定了,所以使用call()或apply()调用箭头函数时,无法对this进行绑定。传入的第一个参数就会被忽略掉。

如下:

es6 async 箭头函数 es6箭头函数作用_作用域_11

子在川上曰:逝者如斯夫,不舍昼夜!每天快乐一点点,进步一点点@girl!