箭头函数给我们的工作带来了极大的方便,但是它们的缺点是什么呢?我们应该一直使用箭头函数吗?在什么情况下我们应该停止使用箭头函数?现在,让我们开始吧。箭头函数的一些缺点1.不支持参数对象在箭头函数中,我们不能像在普通函数中那样使用参数对象。constfn1=()=>{console.log('arguments',arguments)}fn1('fatfish','medium')functionfn2(){console.log('arguments',arguments)}fn2('fatfish','medium')可以看出fn1箭头函数报错,但是fn2可以正常读取arguments对象。我们怎样才能得到箭头函数中传递给函数的所有参数呢?是的,没错,可以使用SpreadOperator来解决。constfn3=(...values)=>{console.log('values',values)}fn3('fatfish','medium')2.您不能通过应用、调用或绑定更改此指针。相信你可以很容易看出下面的代码会输出什么。constfn1=()=>{console.log('this-fn1',this)}fn1()functionfn2(){console.log('this-fn2',this)}fn2(){name:'fatfish'}我们想让fn1和fn2都打印对象,怎么办?代码:constthisObj={name:'fatfish'}constfn1=()=>{console.log('this-fn1',this)}fn1.call(thisObj)functionfn2(){console.log('this-fn2',this)}fn2.call(thisObj)因为箭头函数在定义的时候就决定了它的this指向谁,所以没办法再用fn1.call(thisObj)改变它。什么时候不能使用箭头函数?箭头函数不是万能的,至少有4种情况我们不应该使用它们。1.请不要在构造函数中使用箭头函数Person(name,age){this.name=namethis.age=age}constPerson2=(name,sex)=>{this.name=namethis.sex=sex}console.log('Person',newPerson('fatfish',100))console.log('Person2',newPerson2('fatfish',100))为什么newPerson2会报错?因为构造函数通过new关键字生成了一个对象实例。生成对象实例的过程也是通过构造函数将this绑定到实例的过程。但是箭头函数没有自己的this,所以不能作为构造函数使用,也不能通过new操作符调用。2、请不要在点击事件中操作这个。我们经常在点击事件中通过this来读取元素本身。const$body=document.body$body.addEventListener('click',function(){//this和$body元素是等价的this.innerHTML='fatfish'})但是如果你使用箭头函数给DOM元素添加回调,这将相当于全局对象窗口。const$body=document.body$body.addEventListener('click',()=>{this.innerHTML='fatfish'})3.请不要在对象方法中使用箭头函数。constobj={name:'fatfish',getName(){returnthis.name},getName2:()=>{returnthis.name}}console.log('getName',obj.getName())console.log('getName2',obj.getName2())你知道这段代码会输出什么吗?是的,getName2方法不会打印“fatfish”,因为此时this和window是等价的,不等于obj。4.请不要在原型链中使用箭头函数constPerson=function(name){this.name=name}Person.prototype.showName=function(){console.log('showName',this,this.name)}Person.prototype.showName2=()=>{console.log('showName2',this,this.name)}constp1=newPerson('fatfish',100)p1.showName()p1.showName2()写在最后,以上四种情况,不建议使用箭头函数。如果你知道其他情况,请在留言区给我留言,我们一起学习进步;如果你觉得我今天的内容对你有帮助,记得点赞,关注我,分享给你的朋友,说不定能帮到他。最后,感谢阅读,祝编程愉快!
