普通函数与箭头函数的区别

87 阅读1分钟
  • 最明显的区别,箭头函数可以没有function关键字定义,可以省略function

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

    • 在普通函数中,this的指向是可变的,但是在箭头函数中,它是固定的

    • 箭头函数中的this指向函数定义时所在的对象,箭头函数的this指向固定化,不是因为箭头函数内部有绑定this的机制,是因为箭头函数根本没有自己的this。导致内部的this就是外层代码块的this。正是因为它没有this,所以就不能被当做构造函数

      script 标签相当于一个代码块,this指向window,所以打印出来的是window对象

      <script>
          const fun = () => {
              console.log(this); // window对象
          }
          fun()
      </script>
      
      <script>
          const fun = () => {
              console.log(this); // window对象
          }
          fun.call({id: 123}) // 箭头函数就没有this,也没有改变this指向一说
      </script>
      
      <script>
          function fun() {
              return function (){
                  return () => {
                      console.log(this);
                  }
              }
          }
      
          let fn = fun.call({id:3});
      
          fn.call({id:3})(); // 打印出来{id: 3}
          fn()(); // 打印出来window对象
      <script>
      
  • 不可以当做构造函数,也就是说,不可以使用new 命令,否则会抛出一个错误

  • 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用rest参数代替

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

  • 因为箭头函数没有自己的this,所以当然不能用call bind apply这些方法改变this指向

  • 箭头函数可以省略return,普通函数不行