箭头函数的this指向上级作用域

    1. var name = 'lcj'
    2. const person = {
    3. name: 'hesehuoyan',
    4. say: () => console.log(this.name),
    5. sayHello: function () {
    6. console.log(this.name)
    7. },
    8. sayHi: function () {
    9. setTimeout(function () {
    10. console.log(this.name)
    11. }, 500)
    12. },
    13. asyncSay: function () {
    14. setTimeout(()=>console.log(this.name), 500)
    15. }
    16. }
    17. person.say() //lcj
    18. person.sayHello() //hesehuoyan
    19. person.sayHi() //lcj
    20. person.asyncSay() //hesehuoyan

    箭头函数有以下几点需要注意的:

    1. 箭头函数没有自己的this对象。
    2. 箭头函数没有constructor,不可以当作构造函数,也就是说,不可以对箭头函数使用new命令,否则会抛出一个错误。

      1. let a = () => {};
      2. let b = new a(); // a is not a constructor
    3. 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。

      1. 第一种情况,箭头函数不存在arguments对象
      2. 第二种情况,若箭头函数被外层函数包裹,则拿到的arguments 对象是外层函数的 ```javascript // 第一种情况 let foo = () => { console.log(arguments); }; foo(1, 2, 3, 4); // Uncaught ReferenceError: arguments is not defined

    // 第二种情况 function foo() { setTimeout(() => { console.log(‘args:’, arguments); }, 100); }

    foo(2, 4, 6, 8) // args: [2, 4, 6, 8]

    let foo = (first, …rest) => { console.log(first, rest) // 1 [2, 3, 4] }; foo(1, 2, 3, 4) // 1 [2, 3, 4]

    ```

    1. 不可以使用yield命令,因此箭头函数不能用作 Generator 函数。