当前位置: 首页 > Web前端 > JavaScript

你是否正确使用了ES6的箭头函数?

时间:2023-03-27 16:39:07 JavaScript

ES6箭头函数,你用对了吗?删除,谢谢!说明在ES6中允许使用“箭头”(=>)来定义函数,所以在我们后续写代码的过程中出现了很多箭头函数,就是因为太香了!但是也带来了一些疑问,灵魂拷问,你真的懂箭头函数吗?因为我不能肯定地回答,所以我写了这本书。箭头函数一个简单的箭头函数//es6consthello=item=>item;//es5上面的代码等同于consthello=function(item){returnitem;};用法(三if)如果箭头函数不需要参数或者需要多个参数,用括号来表示参数部分。consthello=()=>'你好';constsum=(num1,num2)=>num1+num2;如果箭头函数的代码块部分不止一条语句,用花括号括起来,用return语句返回。constsum=(num1,num2)=>{让num=0;如果(num1&&num2){num=num1+num2;}returnnum;}如果箭头函数直接返回一个对象,必须在对象外加上括号,否则会报错。constgetInfo=id=>({id:id,name:"你好"});四大注意点以下四点可能会被无数次提及,出现在各种面试题中。是的,今天又来了一次。箭头函数没有自己的this对象,不能作为构造函数使用。它不能使用新命令,也不能使用参数对象。该对象不存在于函数体中。如果要使用,可以使用rest参数代替yield命令,所以箭头函数不能作为生成器函数使用。箭头函数的this指向普通函数,内部this指向函数运行的对象。箭头函数没有自己的this对象,内部的this就是定义时上层作用域中的this。箭头函数内部的this指针是固定的,相比之下,普通函数的this指针是可变的。把ES6转成ES5,发现这其实只是一个所谓的箭头函数,只是从外面“借”来的//ES6functionfoo(){setTimeout(()=>{console.log('id:',this.id);},100);}//ES5functionfoo(){var_this=this;setTimeout(function(){console.log('id:',_this.id);},100);}在setInterval中,其实是没有this.s2的,所以它的值是不会变的。功能测试(){this.s1=0;这个.s2=0;//箭头函数setInterval(()=>this.s1++,1000);//普通函数setInterval(function(){this.s2++;},1000);}s1//1s2//0修改普通函数后可以修改s2从这里可以发现箭头函数非常适合回调,不能用作构造函数。这很容易理解。因为箭头函数根本就没有自己的this,怎么构造呢?所以箭头函数不能用作构造函数。您也不能使用new关键字。不能这样使用arguments对象,arguments指向外层函数对应的变量,类似兄弟super,new.targetfunctionhello(){setTimeout(()=>{console.log('args:',arguments);},1000);}hello(1,2,3,4)//args:[1,2,3,4]也是因为这个问题,箭头函数不能使用call(),apply(),bind()这些方法改变了this的方向,所以箭头函数的this是“静态的”。箭头函数的好与坏说到箭头函数的this,就无从谈起了。事实上,并非如此。在ES6之前,this对象一直是个让人头疼的问题。使用时要小心。如果回调太多,代码就会混乱。正是因为这个“静电”this的出现,才让这些问题得到了改善。在使用箭头函数时,需要合理利用箭头函数的优缺点,选择合适的场景。在定义对象方法和动态绑定this时不要使用箭头函数。感谢万能网络阮一峰的ES6教程和辛勤的自我,个人博客,GitHub