箭头函数和普通函数之间的区别?

x33g5p2x  于2022-03-18 转载在 其他  
字(0.9k)|赞(0)|评价(0)|浏览(611)

一、写在前面
今天看到一道面试题,讲的是箭头函数和普通函数之间的区别,我想了一下,发现自己答不全,所以写一篇博客来具体总结一下。
二、具体区别
2.1、普通函数和箭头函数的this指向不同。箭头函数中没有this。

let obj = {
  say: function() {
    console.log(this)
  }
}
obj.say()  //{ say: func }

let obj2 = {
  say: () => {
    console.log(this)
  }
}

obj2.say()  //{}

2.2、箭头函数不能作为构造函数,不能使用new关键字。

const func1 = () => {}
new func1()  //func1 is not a constructor

2.3、箭头函数不绑定arguments,如果存在多余参数,可以使用rest来解决。

<script>

    const func1 = () => {
      console.log(arguments) //arguments is not defined
    }
    func1(1, 2, 3, 4)

  </script>
<script>

    const func1 = (...rest) => {
      console.log(rest)  //[1,2,3,4] 
    }
    func1(1, 2, 3, 4)

  </script>

2.4、箭头函数会捕获上下文的this,作为自己的this。
2.5、使用call,apply来对函数进行调用,传入参数时,参数一的改变对this没有影响。

<script>

    const func1 = () => {
      console.log(this)
    }
    func1.call({name: 'xsy'})  //window

  </script>

2.6、箭头函数没有原型对象,所以更不能在原型对象上添加方法

<script>

    const func1 = () => {
      console.log(this)
    }
    func1.prototype.id = 1121  //Cannot set properties of undefined (setting 'id')
  </script>

2.7、箭头函数不能作为生成器函数,也就是其内部不能使用yeild

相关文章