亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > 你真的知道JavaScript中的“this”嗎?

你真的知道JavaScript中的“this”嗎?

來源:千鋒教育
發(fā)布人:wjy
時間: 2022-11-16 14:28:00 1668580080

  介紹

  在前端面試過程中,面試官經(jīng)常會問一些關(guān)于this關(guān)鍵字的問題,即使是工作多年的人也可能知之甚少。因此,本文對this關(guān)鍵字進(jìn)行了詳細(xì)分析,以便他人深入了解。

  什么是"this"?

  調(diào)用函數(shù)時,將創(chuàng)建一個執(zhí)行環(huán)境,this 在運(yùn)行時根據(jù)函數(shù)的執(zhí)行環(huán)境綁定。它允許函數(shù)在內(nèi)部引用上下文中的執(zhí)行變量,使函數(shù)編程更加優(yōu)雅和簡潔。

  看看下面的代碼,想想為什么不同的調(diào)用方法會打印出不同的結(jié)果。

你真的知道JavaScript中的“this”嗎1

  其實很簡單,因為不同的調(diào)用方法的this指向不同的點(diǎn)。為什么這指向不同的函數(shù)調(diào)用方法?是什么決定了這一點(diǎn)?現(xiàn)在讓我們開始帶著問題深入了解這個問題!

  “this”的約束規(guī)則

  默認(rèn)綁定

  默認(rèn)綁定規(guī)則下,函數(shù)的運(yùn)行環(huán)境為全局環(huán)境,this默認(rèn)指向Window。

  默認(rèn)綁定規(guī)則如下:

  1、this指向Window的全局函數(shù)

  在全局函數(shù)中直接打印 this 時,可以看到 this 指向 Window。

你真的知道JavaScript中的“this”嗎2

  2、獨(dú)立函數(shù)調(diào)用this指向Window

  獨(dú)立的函數(shù)調(diào)用,即直接調(diào)用函數(shù),如 foo()。

你真的知道JavaScript中的“this”嗎3

  這里的foo默認(rèn)鏈接到Window,相當(dāng)于window.foo()。根據(jù)函數(shù)的隱式綁定規(guī)則,誰調(diào)用誰就指向誰。這里的 this 指向 Window。結(jié)果如下:

你真的知道JavaScript中的“this”嗎4

  同樣,如果嵌套函數(shù)中直接調(diào)用的函數(shù)也是獨(dú)立的函數(shù)調(diào)用,那么this也指向Window:

你真的知道JavaScript中的“this”嗎5

  在上面的代碼中,子函數(shù)son也嵌套在對象obj的方法foo中。當(dāng)直接調(diào)用子方法時,子里面的this指向Window,所以子函數(shù)里面的this.a結(jié)果是全局變量a,也就是10。

  如果要在子函數(shù)中使用 obj 中的變量 a 怎么辦?只需將 this 對象分配給另一個變量,并在子方法中引用此變量:

你真的知道JavaScript中的“this”嗎6

  3、對于自執(zhí)行函數(shù)調(diào)用,this指向window

  自執(zhí)行函數(shù),顧名思義,就是定義函數(shù)后自動調(diào)用的函數(shù),自執(zhí)行函數(shù)的this指向如下代碼:

你真的知道JavaScript中的“this”嗎7

  上面代碼中的foo函數(shù)內(nèi)部嵌套了一個自執(zhí)行函數(shù)son,而son內(nèi)部的this指向Window。這里this指向的原理類似于獨(dú)立函數(shù)調(diào)用,即先聲明一個son方法,然后通過son()執(zhí)行該函數(shù)。如果要獲取son中上層對象obj的變量,可以在調(diào)用時將this點(diǎn)作為參數(shù)傳遞給自執(zhí)行函數(shù)son。

  4、閉包里面的this指向Window

  閉包可以理解為一個函數(shù)內(nèi)部定義的函數(shù),可以訪問其他函數(shù)的內(nèi)部變量。當(dāng)我們查看閉包中的 this 點(diǎn)時,我們可以看到 this 指向 Window。

你真的知道JavaScript中的“this”嗎8

  上面代碼中,foo函數(shù)的第一個this.a的this指向obj對象,所以結(jié)果是20。return函數(shù)調(diào)用的this指向Window,結(jié)果是10。obj.foo ()() 可以理解為:

你真的知道JavaScript中的“this”嗎9

  fn 是 obj.foo() 返回的函數(shù)。fn 函數(shù)是獨(dú)立調(diào)用的,this 指向 Window。

  隱式綁定

  當(dāng)函數(shù)作為方法調(diào)用時,this指向函數(shù)的直接父對象,稱為隱式綁定。

  在隱式綁定規(guī)則中,認(rèn)為 this 指向調(diào)用函數(shù)的人,并將指向函數(shù)的直接父對象。比如obj.foo()中foo函數(shù)里面的this指向obj,而obj1中的foo函數(shù)。obj2.foo() 指向 obj2。

你真的知道JavaScript中的“this”嗎10

  上面的代碼也是對 foo 函數(shù)的調(diào)用。調(diào)用方法不同,結(jié)果不同。

  ‘exp1’中的foo直接被獨(dú)立函數(shù)調(diào)用,所以,this指向Window,結(jié)果為10;‘exp2’中的調(diào)用方法是obj。foo(),foo函數(shù)的this指向上級調(diào)用對象obj;結(jié)果是 20。'exp3' 中 foo 函數(shù)的直接上級對象是 obj2,所以結(jié)果是 30。

  隱式綁定丟失

  隱式綁定丟失意味著隱式綁定的函數(shù)丟失了它的綁定對象,所以默認(rèn)綁定到Window。這種方法在我們的項目中很容易導(dǎo)致錯誤,但也很常見。

  1、隱式綁定的函數(shù)被分配為沒有 this 指向的變量。

  在下面的代碼中,obj下的foo值實際上是foo函數(shù)的地址信息,并不是真正的foo函數(shù)。當(dāng) obj.調(diào)用 foo() 時, this 的 this 隱式綁定到 obj。當(dāng) var fn=obj.foo 為 fn 分配一個函數(shù)時。相當(dāng)于把foo函數(shù)的地址賦給fn。這時候fn沒有和obj關(guān)聯(lián),所以這里fn()的運(yùn)行環(huán)境就是全局環(huán)境,this指向Window,this的結(jié)果a 是 10。

你真的知道JavaScript中的“this”嗎11

  2、隱式綁定的函數(shù)作為參數(shù)傳給函數(shù),丟失了this點(diǎn)。

  當(dāng)一個隱式綁定的函數(shù)直接作為參數(shù)傳遞給另一個函數(shù)時,這個綁定會丟失,從而指向全局Window。obj.foo作為參數(shù)傳給bar函數(shù)后,this.a的結(jié)果是10。這里bar(obj.foo)等價于var fn=obj.foo; bar(fn)。

你真的知道JavaScript中的“this”嗎12

  3、內(nèi)置對象setTimeout和setInterval函數(shù)的隱式綁定丟失

  內(nèi)置函數(shù) setTimeout 和 setInterval 的 this 默認(rèn)指向 Window。

你真的知道JavaScript中的“this”嗎13

  對了,當(dāng)setTimeout或者setInterval的第一個參數(shù)是箭頭函數(shù)時,this會指向上層的函數(shù)執(zhí)行環(huán)境。代碼如下:

你真的知道JavaScript中的“this”嗎14

  顯式綁定

  當(dāng)我們要將函數(shù)綁定到指定對象時,可以使用call、apply、bind等方法手動改變this的方向,即顯式綁定。

  在下面的代碼中,將 foo 顯式綁定到 p 對象的方法分別使用 call、apply 和 bind 來舉例說明。顯式綁定 call 和 apply 的方法會在顯式綁定后直接調(diào)用,而顯式綁定 this 到 bind 的方法需要手動調(diào)用。

你真的知道JavaScript中的“this”嗎15

  關(guān)于硬裝訂

  顯式綁定可以幫我們把this改成指定對象,但是不能解決隱式綁定缺失的問題,比如:

你真的知道JavaScript中的“this”嗎16

  在上面的代碼中,調(diào)用是綁定 this 指向 p 對象,但最終 this 指向的是 Window。此時,我們可以通過硬綁定來解決這個問題。

你真的知道JavaScript中的“this”嗎17

  “new”綁定

  new綁定是我們常用的方法。事實上,我們可以創(chuàng)建一個構(gòu)造,然后新建一個實例對象。這時候this指向了new出來的實例對象。

  當(dāng)我們彼此認(rèn)識時,我們主要做以下事情:

  a、創(chuàng)建一個新對象

  b、讓這一點(diǎn)指向新對象并執(zhí)行構(gòu)造體

  c、將新對象的 proto 屬性設(shè)置為指向構(gòu)造的原型對象

  d、判斷構(gòu)造的返回類型。如果是,則返回新對象。如果它是引用類型,它將返回此類型的對象。首先,創(chuàng)建了“Person”的構(gòu)造,然后,通過“new”創(chuàng)建了一個“zhangsan”的實例對象。在“zhangsan”的“foo”函數(shù)中,“this”指向“zhangsan”的實例。

你真的知道JavaScript中的“this”嗎18

  在嚴(yán)格模式下,“this”指向一個問題。

  1.獨(dú)立調(diào)用函數(shù)的內(nèi)部“this”是“undefined”

你真的知道JavaScript中的“this”嗎19

  2.“call()”和“apply()”中的this總是他們的第一個參數(shù)

你真的知道JavaScript中的“this”嗎20

  總結(jié)

  這是一個比較復(fù)雜的知識點(diǎn)。當(dāng)然,如果我們真的理解了this的原理,那么遇到this所指出的問題就很簡單了。如果我們明白了這一點(diǎn),不僅可以為前端面試加分,也有利于我們的發(fā)展和學(xué)習(xí)。

  讓我們總結(jié)一下,其約束原則如下:

  默認(rèn)綁定,this指向全局Window。

  不要忘記隱藏綁定的丟失。

  它顯示了綁定。他通過使用 call、apply 和 bind 改變了這個方向。

  new綁定,構(gòu)造new的一個實例,this指向new的實例對象。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
全棵女性艺术写真| 久久99国产精品99蜜桃| 狠狠色综合网久久久久久| 久久天天躁狠狠躁夜夜AⅤ| 牛和人交VIDEOS欧美3D| 日日噜噜夜夜爽爽| 亚洲AV无码成人精品区一本二本| 夜夜揉揉日日人人| YY影院电视剧大全| 国产男女猛烈无遮挡免费视频| 久久WWW色情成人免费观看| 女人高潮喷水毛片免费 | 日本少妇高潮喷水XXXXXXX| 无码午夜成人1000部免费视频| 亚洲国产一二三精品无码| 中国另类丰满熟妇乱XXXXX| 啊灬啊灬啊灬快灬高潮了老| 国产精品对白刺激久久久| 精品久久亚洲中文无码| 女人毛毛扒开自慰| 天堂资源中文WWW| 亚洲无熟妇成人无码| JAPANESE嫩21VIDE| 国产免费又爽又色又粗视频| 国产熟妇人妻ⅩXXXX麻豆网址| 精品久久综合1区2区3区激情| 老外免费CSGO交易网站有哪些| 欧美精品成人久久AV爱乃娜美| 日本人も中国人も汉字を| 天天躁夜夜躁狠狠夜夜| 亚洲自国产拍揄拍| 被村长狂躁俩小时玉婷视频| 国产午夜无码视频在线观看| 老牛精品亚洲成AV人片| 少妇扒开毛茸茸的B自慰| 亚洲国产精品久久久久爰色欲| 中文字幕一精品亚洲无线一区| 动漫RH男男车车好快的车车| 精品人妻无码区在线视频| 欧美致敬很多经典的黑白MV| 校长办公室岔开腿呻吟| 一对一大尺度聊天APP安装| 粗大猛烈进出高潮喷浆H| 久久WWW成人_看片| 肉丝超薄少妇一区二区三区| 亚洲精品无码AV片| 菠萝蜜视频网在线WWW| 精品免费看国产一区二区| 人人爽人人澡人人人妻、百度| 亚洲AV成人无码久久精品澳门| 99久E在线精品视频在线| 国产无人区码SUV| 欧美综合自拍亚洲综合图片区 | 一区二区精品视频日本| 丰满少妇高潮惨叫久久久| 无码中文字幕AⅤ精品影院| 一对浑圆的胸乳被揉捏动态图| 扒开粉嫩的小缝隙喷白浆| 狠狠色噜噜狠狠狠777米奇| 另类小说激情婷婷久久| 无码少妇一区二区三区芒果| 中文字幕一区二区三区乱码视频| 国产精品JIZZ在线观看无码| 女人扒开腿让男人狂桶30分钟| 性色A∨精品高清在线观看| FREEXX性黑人大战欧美| 精品久久久久久久久中文字幕 | 国产嫖妓一区二区三区无码| 男生把自己的手到女生的QQ里| 亚洲AⅤ秘区二区三区4| 草莓视频免费观看| 久久水蜜桃网国产无线网欧美日韩 | 亚洲色偷偷综合亚洲AV色欲| VR成品在线网站| 极品粉嫩国产18尤物在线观看| 人妻AV无码一区二区三区| 亚洲AV无码专区精品无码| 成人精品一区二区三区在线观看| 久久夜色精品国产噜噜噜亚洲AV | CHINA浴室洗澡VOYEUR| 国产一区二区三区在线电影| 轻点灬大JI巴大粗长了视频| 亚洲国产精品VA在线观看麻豆| 国产 熟女 高潮 www| 欧美黑人又大又粗XXXXX吞精| 亚洲欧洲日产国码无码AV喷潮| 高清欧美精品XXXXX在线看| 欧美XXXX做受欧美| 野花社区影视在线WWW官网| 国产无遮挡又爽又黄的视频| 三个人换着躁B一PL| 97成人碰碰久久人人超级碰OO| 久久精品国产亚洲AV麻| 亚洲AV无码精品色夜午夜网址| 丰满熟妇岳AV无码区HD| 欧美又粗又大XXXXBBBB疯| 岳丰满多毛的大隂户| 精产国品一二三产品区别在哪| 玩弄CHINESE丰满人妻VI| 被学长抱进小树林C个爽| 女局长白白嫩嫩大屁股| 伊人久久大香线蕉AV网| 精品伊人久久大线蕉色首页| 亚洲AⅤ无码精品一区二区三区| 国产99久9在线视频传媒| 日韩激情在线小视频观看| 又嫩又紧欧美12P| 国产在线乱码一区二区三区| 日韩在线视频一区二区三区| 97无码免费人妻超级碰碰夜夜| 精品久久久久久中文字幕无码VR| 亚洲AV成人一区二区三区在线观 | 英语老师乖乖挽起裙子怎么写作文 | 极品少妇被黑人白浆直流 | Japanese日本护士XXXX18一19| 麻豆成人传媒一区二区| 日产乱码一二三区别免费看| A级毛片免费高清视频| 内射少妇39亚洲区| 337P日本大胆欧洲色噜噜| 免费观看片的APP下载| 在线精品亚洲观看不卡欧| 久久综合给合久久狠狠狠97色6| 亚洲AV永久综合在线观看尤物 | 无码AV免费毛片一区二区| 高清欧美精品XXXXX在线看| 日文中字乱码一二三区别在哪| 成 人 黄 色 网 站 18| 日产精品卡二卡三卡四卡区| 成 人片 黄 色 大 片| 日韩精品无码一本二本三本 | 奶头好大揉着好爽视频午夜院| 幼儿免费网站精品幼儿1| 老熟女太熟了95AV| 18禁黄污无遮挡无码网站 | 粉嫩aV一区二区三区| 色8久久人人97超碰香蕉987| 吃瓜网最新官网地址| 少妇高潮喷潮久久久影院| 国产AV无码精品色午夜| 无码AV免费精品一区二区三区| 国产女人18毛片水真多| 亚洲AV永久无码精品无码流畅| 精品AV综合一区二区三区| 亚洲制服丝袜无码AV在线| 久欠精品国国产99国产精2 | 美女高潮无套内谢| AV在线播放日韩亚洲欧| 人人爽人人操人人精品| 丰满少妇高潮惨叫在线观看| 无码AV免费不卡在线观看| 国产专区一线二线三线品牌东| 亚洲精品亚洲人成在线观看麻豆| 久久精品无码AV| 50岁毛多熟女一区二区三区| 奇米第四色777ME| 丰满性熟妇ⅩXXOOOZZX| 午夜亚洲AV日韩AV无码大全| 精精国产XXXX视频在线播放| 杂乱小说2第400部| 欧美XXXX做受欧美88HD| 成人免费A级毛片无码片在线播放| 少妇兽交PWWW综合网| 国产一区二区三区水蜜桃| 野花香在线视频免费观看第一集 | 中文字幕欧美人妻精品一区| 欧美一区精品视频一区二区| 国产AV一区二区二三区妇| 亚洲AV无码专区亚洲AV漫画| 久久中文字幕AV一区二区不卡| ⅩXXⅩ内射意大利老妇| 色狠狠色噜噜AV天堂一区| 国产农村乱子伦精品视频| 亚洲无线码高清在线观看| 欧美黑人猛XXxXX内射| 夫前人妻被灌醉侵犯在线| 玩弄chinese丰满人妻| 精品视频一区二区三区在线观看| 主人给我戴上奶牛榨乳器调教 | 日本精产国品一二三产品区别 | 久久精品国产99国产精品澳门 | 国产超碰人人爽人人做人人添| 亚洲成人片在线观看| 女人被狂躁高潮啊的视频在线看| 99视频国产精品免费观看| 亚洲欧美中文日韩V在线观看| 久久精品A一国产成人免费网站| 。国产精品麻豆成人AV网| 日日摸日日碰夜夜爽无码| 好男人在线观看无遮挡版| 18禁裸乳无遮挡免费网站| 骚片AV蜜桃精品一区| 精品少妇无码AV无码专区蜜臀| 99久热RE在线精品视频| 无码无套少妇毛多18PXXXX| 久久精品国产2020观看福利| 超级YIN荡的公司聚会| 无码少妇丰满熟妇一区二区| 久久精品动漫一区二区三区| FREEXXXX国产HD中文对白|