一、写在前面
今天看到一道面试题,讲的是箭头函数和普通函数之间的区别,我想了一下,发现自己答不全,所以写一篇博客来具体总结一下。
二、具体区别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
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123561495
内容来源于网络,如有侵权,请联系作者删除!