当前位置: 首页 > 科技观察

=-箭头功能·方便快捷,但也要小心

时间:2023-03-13 14:31:51 科技观察

箭头功能一定要掌握。今天一起来学习吧。在给开发者带来方便的同时,我们也要注意它的“无能”。先来看一个例子:constnames=['wsy','suyan','前端类'];letlengths=names.map(name=>name.length);console.log('lengths=',lengths);Result如图:先看其语法:1.无参数functioncall(callback){callback();}call(()=>{console.log('arrowvoid');});//箭头函数类似于下面这个函数调用(function(){console.log('void');});2。只有一个参数,没有返回值functioncall(callback){callback('前端类');}call(name=>{console.log('arrow',name);});//箭头函数类似于下面的函数调用(function(name){console.log(name);});3.只有一个参数和一个返回值functioncall(callback){//返回值为4letlen=callback('前端类');console.log(len);}//只有一行表达式省略大括号call(name=>name.length);//类似Forthiscall(name=>{returnname.length;});//箭头函数类似下面的函数call(function(name){returnname.长度;});4.有多个参数和一个返回值functioncall(callback){letlen=callback(1,2,3);console.log(len);//6}//多个参数,返回值,只有一行表达式省略花括号call((a,b,c)=>a+b+c);//类似于这个call((a,b,c)=>{returna+b+c;});//箭头函数类似于下面的函数调用(function(a,b,c){returna+b+c;});从上面的例子我们可以知道,每个箭头函数都可以写一个功能相同的普通函数,那为什么要用箭头函数呢?连接你我他后——本课使用箭头函数解决this指向问题不知道大家有没有发现,在写下面两个函数的时候,VSCode默认使用的是箭头函数:setTimeout(()=>{//这里是箭头函数},100);setInterval(()=>{//这是一个箭头函数},200);使用箭头函数有几点需要注意:1.使函数更短,上面的例子3就是一个很好的例子;2.它没有自己的this和argument,比如下面的代码:letperson={name:'suyan',showName:function(age){window.setTimeout(()=>{console.log('this=',this);console.log('arguments=',arguments);console.log(this.name,age);},100);}};person.showName(20);打印结果为:3。不能用作构造函数;letDog=name=>{this.name=name;};//错误UncaughtTypeError:DogisnotaconstructorletaDog=newDog('fe');letDog2=function(name){this.name=name;};//更正letaDog2=newDog2('fe');4.箭头函数没有原型属性:letDog=name=>{this.name=name;};Dog.prototype;//undefined5.Thisvarname='Iamwidow';letanimal={name:'animal',showName:age=>{console不能通过call和apply绑定.log('this=',this);console.log('name|age=',this.name,age);}};letdog={name:'dog'};animal.showName.call(dog,20);animal.showName.apply(dog,[21]);letbindName=animal。showName.bind(dog,22);bindName();运行代码,结果如下:因为箭头函数没有this指针,所以无法通过通过call、apply、bind修改this只能传递参数,这个参数会被忽略。