重温箭头函数

178 阅读2分钟

在es6标准中就新增了箭头函数,这些年来虽然一直在用箭头函数,但没有对箭头函数有更深入的理解,工作之余重温箭头函数。

使用方法

let func = () => {}

为什么使用箭头函数

1. 代码简洁
2. 箭头函数内部的this跟箭头函数外部的this是同一个this(或许你也这样子理解,后面的真面目会解释这种想法的本质原因)

箭头函数的真面目

1. 箭头函数内部不会创建this
    我们在学习js函数的过程中,知道每个函数内部都会创建一个this,表示当前函数运行时所在的环境对象,但在箭头函数内部,
    不会创建属于自己的this。箭头函数内部的this是继承来的,继承于箭头函数定义时所处的外层执行环境的this
    
2. 箭头函数内部的this指向永不改变
    箭头函数中的this是在函数定义的时候就确定的,因此后期无论如何修改它的作用域,它永远指向定义时所指的那个this,
    因此我们无法使用call/apply/bind来修改箭头函数的作用域

产生的影响

1. 箭头函数不用作为构造函数使用
    我们知道通过new初始化一个构造函数就可以生成一个实例,这个实例就拥有了属于自己的this,但如果使用箭头函数来编写
    一个构造函数的话,这个构造函数内部的this就永远指向了它定义时所在的外层环境的this,无论怎么初始化实例,它的this
    也永远的指向了定义时所在的外层this

2. 箭头函数没有自己的arguments
    箭头函数内部的arguments对象跟外层作用域的arguments对象指的是同一个对象

3. 箭头函数没有原型prototype

4. 箭头函数不能用作generator函数,不能使用yeild关键字