什么是箭头函数箭头函数是JavaScript6的一种新语法,简称ES6。它允许我们使用short=>而不是函数将八个字符压缩为两个。constjsjiami1=function(str){alert(`我是普通函数jsjiami${str}`);}jsjiami1('.com');constjsjiami2=(str)=>{alert(`Iamanarrowfunctionjsjiami${str}`)}jsjiami2('.com');//可以明显看出我们省去了很多打字的时间,一个函数保存6个字符,100个函数保存600个字符。哈哈。那么除了字长短之外,它还有哪些特点呢?今天我们就来说说箭头函数this的特点之一。Whatisthis这个字面意思是,这个,现在。它是一个动态变量,指向不同环境中的不同对象。今天我们要搞清楚的是箭头函数的this在不同情况下指向谁?顺便说一下普通函数的this。普通函数敲代码光理论还不够,直接上??实验课。varjajiami=function(){console.log(this);//window可以尝试用F12抛出浏览器}jajiami('js在线一键解密jsjiami.com');从上面的代码来看,普通函数中的this指向的是window对象,不着急,我们往下看。varobj={a:'jsjiami.v6',b:'sojson.v6',c:function(){console.log(this);}}obj.c();//obj对象vartemp=obj.c;温度();//窗口对象现在我们创建一个包含方法的对象。我们尝试调用它,看看函数的this是什么。从打印结果可以知道,通过object变量执行的obj.c()的this是obj对象本身,而通过temp()执行的this是window对象。为什么?其实我们仔细看不难发现,这里的this对象其实就是调用者本身,也就是谁调用了这个函数,那么这个函数的this就是谁。说到这里,小部分基础薄弱的朋友可能会好奇,为什么temp()没有调用者,而它的this对象确实是window呢?官方文档是这样回答的:因为这个函数里没有设置this,所以默认是global/window对象。(因为没有调用者,那么默认是window)普通函数的this总结了谁调用我,谁是this箭头函数的this箭头函数的this和普通函数的this有点区别。具体来说,我们还是直接进行实验。varjsjiami=()=>{console.log(this);//窗口}jsjiami();乍一看,箭头函数和普通函数一样,直接调用this就是window对象,不过大家不用担心。varobj={a:'jsjiami.v6',b:'sojson.v6',c:()=>{console.log(this);}}obj.c();//windowvartemp=obj.c;temp();//window相信很多不懂的人都会很疑惑,为什么用对象调用c方法时this也是指向window对象。这里引用官方文档来回答大家:箭头函数表达式的语法比函数表达式更简洁,它没有自己的this。现在什么都看不到了,我们再加一层嵌套看看varobj={a:'jsjiami.v6',b:'sojson.v6',c:function(){vard=()=>{控制台日志(这个);}d();}}obj.c();//objvartemp=obj.c;temp();//window在外层嵌套了一层普通函数后,obj.c()的this就变成了obj对象,这里可以开始思考一些细节了。varobj={a:'jsjiami.v6',b:'sojson.v6',c:function(){console.log(this);}}obj.c();//objvartemp=obj.c;temp();//在window例子中,obj.c()也是一个obj对象,那么和上面有什么区别呢?从上下对比可以看出,无论是否被箭头函数包裹,obj时this都是obj对象。thisin是箭头函数外部作用域的this。总结基于大量实验,我们发现普通函数的this=>谁调用我的就是this,没有调用者默认是窗口箭头函数的this=>我的外层作用域里的this是什么,而我这个是js安全领域的,js加密解密也是需要优秀的js知识来支撑的,这也是最重要的。以上就是我对箭头函数this的全部理解。如有不妥之处,还请大家帮忙补充指正。
