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

什么是箭头函数?(函数相关总结)

时间:2023-03-27 15:22:10 JavaScript

箭头函数箭头函数可以让代码更加简洁;箭头函数可以让函数的功能更加纯粹;让fn3=x=>x*2;使用箭头函数方法来定义一个函数。前面学过的函数定义有两种方式:1.函数声明2.函数表达式现在有了新的方式:3.箭头函数格式letfunctionname=(parameter1,...parametern)=>{//functionbody}定义了一个箭头函数//1.函数声明functionfu1(x){returnx*2;}//2.函数表达式letfn2=function(x){returnx*2;}//3.箭头functionletfn3=(x)=>{returnx*2;}当你第一次看到这个箭头函数的时候,你会觉得很奇怪。如果从函数表达式的格式出发,可以通过以下两步演化得到。把function关键字移到()和{}之间,改写function为=>注意:-`=>`是一个整体,不要加空格-箭头函数只是定义不同,函数调用格式不同,没有不同之处。简化写法当只有一个形参时,括号可以省略letf=(x)=>{console.log(x)}//可以简化为:letf=x=>{console.log(x)}当函数体只有一条语句时,大括号可以省略;letf=x=>{console.log(x)}//可以简化为:letf=x=>console.log(x)当函数体只有一条语句,而且是return语句时,你可以省略返回和大括号。letf=x=>{returnx*2}//可以简化为:letf=x=>x*2注意如果返回值是对象,加上()letf=x=>{return{a:1}}//可以简化为:letf=x=>{a:1}//报错letf=x=>({a:1})箭头函数和普通函数的区别1.里面没有参数2.没有作为构造函数3.里面没有this也没有参数letfn=(a,b)=>{console.log(arguments);//报错,参数未定义};fn(1,2);内部this对象指向定义它的对象,而不是使用它的对象。1.箭头函数可以访问this对象,但是thisthis对象指向的是箭头函数定义时所在的对象(宿主对象),而不是运行时对象。varname='lisi';//测试时,这里必须使用var,因为用let声明的变量不能用window调用letobj={name:'zhangsan',f1:()=>{console.log(this);//窗口对象console.log(this.name);//lisi},f2:function(){console.log(this);//objconsole.log(this.name);//张三},f2:function(){console.log(this);//objconsole.log(this.name);//张三}};obj.f1();箭头函数中的this点是固定的,并不是因为箭头函数内部有绑定this的机制。实际原因是箭头函数根本没有自己的this,所以内部的this就是外部代码块的this。varobj={};varf1=functoin(){console.log(this)}varf2=()=>{console.log(this)}f1();f1.call(obj)//调用即可修改了普通函数f2()中this的值;f2.call(obj);//call不能修改箭头函数内部this的值箭头函数不能作为构造函数letPerson=()=>{};letobj=newPerson();//报错,Personisnotaconstructor//换个角度理解,箭头函数没有自己的this,如何处理成员,所以在javascript中不能作为构造函数,函数是一等公民,除了用于最基本的代码提取外,它还可以用作构造函数。它可以做太多的事件。ES6中引入的箭头函数减轻了函数负担。最佳实践(1)优先级:箭头函数>表达式>声明式(2)如果函数中涉及到this的使用,一定要非常小心this,实在不放心就打印出来。(如果函数内部没有this,可以放心使用箭头函数)(3)注意函数声明转为箭头函数时,不会有函数提升。