咨询热线:15533484199 联系人:徐浩轩 地址:四川省成都市成华区建设路建设巷1号附28号
深入理解JS各种this指向问题
来源:BOB最新网站 发布时间:2019-11-07 点击量:449
说到this,入前端坑的人都知道这是JS初期语言毕竟之路。很多人(我就是)对于this的了解很模糊,或者不够全面。最近打算在反过来在看下es6,在es6中又出现了箭头函数对于this的理解有多了层认识。所以就在写一遍来加强自己的认知。
在讲this之前,我们先把作用域链在复习一下
在红宝书中对作用域链的描述有这么一句话:当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问简单来说,作用域链的作用就是在函数使用一个变量的时候,由近到远的查找有自身内部想最顶层也就是window的作用域中查找。
我们作用域链明白了,我们讲一下this.
this又分传统this和箭头函数中的this
传统this的指向:
1.this总是指向它的直接调用者。
2.在非严格模式下当没有调用者的时候,默认指向最顶层也就是window
3.在严格模式下("use strict")当没有调用者的时候,this就是undefined
4.在call、apply、bind绑定的时候,默认指向绑定的对象
箭头函数中this的指向:
1.箭头函数自身不包含this,它是继承与他所处的宿主对象的this。
光写概念,不说看得烦,我敲得也烦。直接上代码吧。
实例一:this指向它的直接调用者
var myObj = { myVal : 3, myFnc : function(){ console.log(this); }}myObj.myFnc();//myobj此时myObj调用了所以this指向于myObj;
实例二:非严格模式下没有调用者的时候
function myFnc(){ console.log(this);}myFnc();//window此时,因为没有调用者,所以this默认指向最顶层也就是window
实例三:严格模式下没有调用者的时候
function myFnc(){ "use strict" console.log(this);}myFnc() //undefined此时,没有调用者,又因为当前是严格模式所以打印出来的this是undefined
实例四:call、apply、bind绑定的时候function myFnc1(){
function myFuc1(){ console.log(this);}function myFnc2(a,b){ console.log(this);}myFnc2.call(myFnc1);//myFnc1此时绑定的就是myFnc1,所以当前this的指向就是myFnc1;call和apply的绑定机制大致是一样的,所以就不一一解释了。var myObj = { myFnc :function(){ setTimtout(function(){ console.log(this); }.bind(this)) }}myObj.myFnc();//myObj因为在定时器函数中,没有调用者,所以默认指向window。又因为使用bind()方法给回调函数直接绑定了当前this指向,所以当前this指向就是myObj。
是不是感觉这么写很麻烦,当今的ES6的年代,还用啥bind绑定。如果需要返回当前函数伸手就是一个箭头函数
实例五:箭头函数简易版
var myObj = { myFnc :function(){ setTimeout(() => { console.log(this) }) }}myObj.myFnc();因为箭头函数继承的是它的宿主对象的this,也就是继承的myFnc的this,而myFnc的This指向是myObj,所以打印出来的当前this指向就是myObj;
实例六:箭头函数嵌套版
var myObj = { myFnc :function(){ function childFnc(){ setTimeout(() => { console.log(this) }) } childFnc(); }}myObj.myFnc();小小的思考一下。。。如果你一瞬间就明白的话,那就表明你已经通关了。由里到外的分析,你就会发现很简单。因为箭头函数,当前this继承于它的宿主也就是childFnc。childFnc方法的执行,因为没有调用者。所以它的this指向的是window。所以当前打印的this指向就是window。
总结:
this指向简单的说就是谁调用就指向谁,没调用就指向window(严格模式undefined)
当出现箭头函数内的,就指向宿主元素。
相关产品
-
该县公安局接警后,立即组织刑侦大队民警赶赴案发现场。经过对现场细致勘察以及对周边群众调查走访,民警掌握了一条重要线索:犯罪嫌疑人仓皇逃离后,营业所工作人员随即追赶了出来,在离营业所不远处发现了一辆可疑的红色车辆。
-
律师出身的加州众议员周本立5日表示,从洛杉矶高等法院3日发布的裁决书看,的确是提供了两个选项,一、是要求圣市市长沙金斯(Kevin B. Sawkins)和市议会立即宣布廖钦和当选,并且让他宣誓就任市议员;二、是如果不肯这样做,市议会5月14日要派人去法院说明,他们为什么没有这样做,以及上述的强制性法令为什么没有发布。
-
”4月16日0点起,凡是在活动期间完成魔方月会员开通的魔友,均可参与每团16名魔方月会员中抽取1名魔友获得1张世界杯门票的活动!
-
中华文化快车是北京市台办于2008年创办的以弘扬中华文化,促进两岸青少年交流为主旨的品牌交流活动。由北京市台办、清华大学、顶新公益基金会主办的第六届中华文化快车--北京心灵呼唤残疾人艺术团于5日开启赴台之旅,参访期间艺术团走进中国文化大学、新竹清华大学、彰化等院校和社区进行交流演出。
-
2017年7月11日是第28个世界人口日,国家人口计生委将此次活动主题确定为:“让家庭健康、和谐”,按照市计生委的要求,结合青县实际,在“7.11”世界人口日期间,贴近实际、贴近群众、贴近生活、贴近家庭,选取商场门口、文化广场、居民社区为主要活动场所,围绕“弘扬婚育新风,共创健康幸福家庭”活动主题,开展了一系列活动,取得了一些成效,现把情况简单总结如下:
-
到了高中毕业季,Pac-10分区的多支大学球队都向他伸出了橄榄枝,这其中不乏UCLA和亚利桑那等全国知名的篮球名校。不过哈登最终还是选择了亚利桑那州大,彼时的亚利桑那州大战绩平平,不受人关注。然而事实证明,哈登的这一选择是明智的:与其在UCLA与拉塞尔-威斯布鲁克和凯文-乐福平分聚光灯,还不如在大二凭借一己之力,带领母校闯入NCAA锦标赛。哈登做到了,他也因此在2009年荣膺Pac-10分区年度球员称号。
-
撒贝宁:人到中年,为工作事业奔忙,会有忽略家人亲情的情况,但对家人的亲情和爱不一定要在节日实现,需要你平时的关心和照顾。父母也能理解参加春晚是无法推卸的责任,更重要的是工作的意义很重大,你要在三十晚上给更多人带来欢乐。他们不会强求我一定要回家吃年夜饭,虽然有点遗憾,但他们内心更多是欣慰,毕竟全中国只有八位主持人在春晚担任这个工作,作为父母肯定觉得这是孩子的工作进步。我今年不回武汉,但会接他们过来,春节期间让父母在身边好好待着,省得在路上奔波。
-
米未创始人马东携手梁冬、睡眠大咖姚吉庆和设计大咖贾伟一起花式聊睡眠;12个意想不到的超级创意震撼发布;电子竞技的世界也是同样精彩,AutoFull傲风电竞椅联手微星一起开启电竞专场,展现出酷炫的电竞装备,为观众带来极佳的游戏体验。现场观众可以和职业选手同台竞技并线上直播,更有职业解说对现场赛况进行解说,让观众体验到职业电竞中紧张刺激的快感。
热点资讯
- 东莞金利工业园的过去与现在的对比:现在工厂租赁超市正在搬走2019-06-26
- 深圳互金协会紧急通知:P2P平台退出期间经营地址不可搬迁2019-06-26
- 针对标准钣金交易,“寻找钣金网络”建立了B2B钣金交易平台。2019-10-29
- 新华网曝光微信、支付宝小程序制作骗局:制作百来块,要价钱几万元2019-06-26
- 探访俄罗斯远东第三大城市:女孩子回头率高,大妈丰腴气质似贵族2019-11-07
- 警方捣毁《绝地求生:刺激战场》“吸星大法”外挂团伙2019-11-06
- EIA库存继续下滑油价泰来油价将上涨超过3%|新浪财经2019-06-26
- 经济日报:国产芯片要白菜化?别被自嗨文带沟里了2019-11-06