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

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

手機(jī)站
千鋒教育

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

千鋒教育

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

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

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

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

你真的知道JavaScript中的this嗎?

來源:千鋒教育
發(fā)布人:wjy
時(shí)間: 2022-09-26 09:52:42 1664157162

  介紹

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

  什么是"this"?

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

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

JavaScript中的this1

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

  “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 時(shí),可以看到 this 指向 Window。

JavaScript中的this2

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

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

JavaScript中的this3

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

JavaScript中的this4

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

JavaScript中的this5

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

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

JavaScript中的this6

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

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

JavaScript中的this7

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

  4、閉包里面的this指向Window

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

JavaScript中的this8

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

JavaScript中的this9

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

  隱式綁定

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

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

JavaScript中的this10

  上面的代碼也是對(duì) 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指向上級(jí)調(diào)用對(duì)象obj;結(jié)果是 20。'exp3' 中 foo 函數(shù)的直接上級(jí)對(duì)象是 obj2,所以結(jié)果是 30。

  隱式綁定丟失

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

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

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

JavaScript中的this11

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

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

JavaScript中的this12

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

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

JavaScript中的this13

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

JavaScript中的this14

  顯式綁定

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

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

JavaScript中的this15

  關(guān)于硬裝訂

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

JavaScript中的this16

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

JavaScript中的this17

  “new”綁定

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

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

  a、創(chuàng)建一個(gè)新對(duì)象

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

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

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

JavaScript中的this18

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

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

JavaScript中的this19

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

JavaScript中的this20

  總結(jié)

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

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

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

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

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

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

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(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
大數(shù)據(jù)測(cè)試工程師需要具備哪些技能?

一、理解大數(shù)據(jù)概念大數(shù)據(jù)測(cè)試工程師需要理解大數(shù)據(jù)的基本概念和原理,如分布式存儲(chǔ)、MapReduce、實(shí)時(shí)計(jì)算等。他們還需要了解如何處理大規(guī)模的...詳情>>

2023-10-14 23:43:03
為什么SpringBoot的 jar 可以直接運(yùn)行?

一、JAR文件的結(jié)構(gòu)與執(zhí)行方式Spring Boot的JAR包是Java Archive的縮寫,它是一種壓縮文件格式,可以將Java項(xiàng)目的類文件、資源文件以及依賴庫等...詳情>>

2023-10-14 23:01:49
站群服務(wù)器是什么?

站群服務(wù)器的含義與用途站群服務(wù)器主要用于支持站群,即由一組相互鏈接的網(wǎng)站組成的群體。這些網(wǎng)站通常由同一組織或個(gè)人擁有,并且經(jīng)常會(huì)互相鏈...詳情>>

2023-10-14 22:46:12
自編碼器是什么?

一、自編碼器原理自編碼器的設(shè)計(jì)靈感源于神經(jīng)科學(xué)中關(guān)于感知系統(tǒng)的認(rèn)知原理,它的核心思想是將輸入數(shù)據(jù)經(jīng)過編碼過程,形成一個(gè)隱藏層的特征表示...詳情>>

2023-10-14 22:41:10
什么是云網(wǎng)融合?

一、云網(wǎng)融合的定義云網(wǎng)融合是指將云計(jì)算與網(wǎng)絡(luò)技術(shù)相結(jié)合,實(shí)現(xiàn)資源的共享、業(yè)務(wù)的協(xié)同,將網(wǎng)絡(luò)與云端服務(wù)深度融合,提供更靈活、高效、安全的...詳情>>

2023-10-14 22:31:47
快速通道
FREEXXXX国产HD中文对白| 永久免费AV无码网站国产APP | WINDOWS乱码的乱码大全| 低头看我是怎么C哭你的| 国产青草视频在线观看| 久久久久久久精品裸体艺术| 强被迫伦姧在线观看中文版| 无码丰满少妇2在线观看| 亚洲午夜性春猛交XXXX偷窥| JAPANESE国产在线观看播| 国产精品久久久久国产A级| 久久精品亚洲中文字幕无码网站| 欧美大胆A级视频免费| 贪婪洞窟H5双修流攻略小说 | 饥渴老熟妇乱子在线播放| 另类小说激情婷婷久久| 日韩人妻AV在线| 亚洲国产群交无码AV| AV无码欧洲亚洲电影网| 国产精品久久午夜夜伦鲁鲁| 老奶奶BGMBGM人与自然| 色窝窝人妻9色聚色窝| 亚洲裸男GAY自慰网站| 锕锕锕锕锕锕~好深啊APP下载 | 处破痛哭A√18成年片免| 黑人AV免费电影| 欧美日韩精品久久久免费观看| 无码中文国产不卡视频| 宅男66LU国产在线观看| 国产AV免费一区二区三区| 久久久久免费看成人影片| 日韩激情无码免费毛片| 亚洲人成网站精品片在线观看| XXXXFREE少妇过瘾| 国内精品久久久久久影院| 欧美老熟妇手机在线观看| 亚洲AⅤ中文无码字幕色本草| √天堂资源中文WWW| 国产精品久久国产精麻豆99网站 | 无码H黄肉动漫在线观看| 中国熟妇色XXXXⅩ老妇| 国产老妇伦国产熟女老妇高清| 免费视频片多多视频免费高清| 无码人妻av一区二区三区毛片| 中文有码无码人妻在线短视频| 国产精品无码专区在线观看| 男人的又粗又长又硬有办法吗 | WWW内射国产在线观看| 机长脔到她哭H粗话H动漫| 日产一二三区别免费必看| 亚洲无人区码一二三码区别图片| 丰满人妻一区二区三区视频53 | BBOX撕裂BASS俄罗斯| 金瓶梅之爱的奴隶| 色欲色香天天天综合无码| 中文字幕无码成人免费视频 | 野花免费观看日本电视剧| 国产成人精品综合久久久久性色| 免费观看30分钟哔哩哔哩视频 | 国精产品一区一区三区有限公司 | 国产精品无码A∨麻豆| 欧美无人区码卡二卡3卡2022| 亚洲欧美乱综合图片区小说区 | 少妇仑乱A毛片无码| 97人人超碰国产精品最新O | 伊人精品成人久久综合全集观看| 国产精品VA无码免费麻豆| 欧美精产国品一二三产品| 亚洲熟妇久久国内精品| 欧美片内射欧美美美妇| 亚洲AV无码久久精品蜜桃| 草莓 丝瓜 香蕉 向日葵 榴莲| 久久久久亚洲AV片无码| 无人区乱码一区二区三区| WWW性久久久COM| 林静公交车被做到高C| 亚洲国产精品无码久久一区二区 | 偷窥无罪之诱人犯罪| JIZZJIZZJIZZ日本| 久久婷婷五月综合色国产香蕉 | 亚洲成A人V欧美综合天堂| 国产成人香蕉久久久久| 日本久久99成人网站 | 亚洲精品无码久久千人斩 | 堕落女教师动漫全无修| 欧美疯狂性受XXXXX喷水| 野兽的夜晚第四季忘不掉的前任 | 中文字幕日本六区小电影| 精品一区二区三区影院在线午夜 | 国产性猛交╳XXX乱大交| 色WWW亚洲国产阿娇| S货叫大点声C烂你的SB| 妺妺自愿做我的性玩具| 一本一道VS无码中文字幕| 黑人巨大两根一起挤进| 下面饿了想吃大香肠| 国产AV精品白浆一区二| 日韩VS欧美VS亚洲VS无码| JAPANESEHD无码中文字| 男人j捅进女人p| 中文字幕无码一线二线三线| 久久伊人少妇熟女大香线蕉| 亚洲丁香五月天缴情综合| 国产色婷婷精品综合在线| 天天狠天天透天干天天怕∴| 丰满人妻一区二区三区无码AV| 人妻精品久久无码专区涩涩| JIZZJIZZ少妇亚洲水多| 欧美性操大鸡狠狠| IPHONE欧美高级| 欧美在线视频二区| JK制服白丝自慰出水| 欧美熟妇另类久久久久久不卡 | 亚洲综合无码一区二区三区不卡| 精品国产亚洲一区二区三区| 亚洲高清中文字幕在线看不卡| 国外免费IPHONE网站| 亚洲AV无码专区国产乱码4| 国偷自产一区二区免费视频| 亚洲成在人线AV品善网好看| 狠狠躁夜夜躁人人爽天天天天| 亚洲成人免费AV| 精品无码成人久久久久久| 亚洲熟女乱色综合一区| 久久久精品无码中文天美| 夜夜爽8888免费视频| 裸身美女无遮挡永久免费视频| 中国另类丰满熟妇乱XXXXX| 美女裸体无遮挡永久免费观看网站 | 偷炮少妇宾馆半推半就激情| 国产精品午夜福利不卡| 亚洲AV无码兔费综| 久久99精品久久久久久HB无码| 亚洲乱理伦片在线观看中字 | 国产无套护士在线观看| 亚洲AV无码乱码精品观看| 娇喘连连抽搐高潮小说| 一本大道久久A久久综合| 妺妺窝人体色7777777| www.五月婷婷.com| 日日狠狠久久偷偷色综合免费 | 亚洲AV无码AV日韩AV网站| 精品人妻无码一区二区色欲产成人| 亚洲熟妇无码AV| 蜜桃国产乱码精品一区二区三区 | 中文亚洲AV片在线观看| 琪琪午夜成人理论福利片美容院| 成年无码AV片在线免缓冲| 天天综合天天做天天综合| 国产艳妇AV在线出轨| 亚洲最新无码成AV人| 哦┅┅快┅┅用力啊熟妇| 吃了继兄开的药后我做的梦更长了 | 久久久亚洲欧洲日产无码AV| 99久久99久久免费精品小说| 日韩无码2021| 国产午夜精品久久精品电影| 亞洲成AV無碼人在線觀看| 欧美XXXX做受欧美88HD| 二人世界免费观看正片在线观看| 校花娇喘呻吟校长陈若雪视频| 久久AⅤ人妻少妇嫩草影院| 97久久精品无码一区二区| 日韩成人一区二区三区在线观看| 国产精品视频二区不卡| 亞洲成AV無碼人在線觀看| 人妻人人澡人人添人人爽| 国产精品亚洲АV无码播放| 亚洲色欲色欲综合网站色偷偷| 欧美丰满美乳XXⅩ高潮www| 大战丰满无码人妻50P免费| 亚洲AV成人综合网伊人APP| 里面也请好好疼爱第5话在哪| EEUSS影院免费最电影| 无码被窝影院午夜看片爽爽JK | 18禁H漫免费漫画无码网站国产 | 热99RE久久精品| 国产精品自在线拍国产手机版 | 亚洲国产精品一区二区久久| 美美女高清毛片视频免费观看| 成人无码视频97免费| 亚洲AV永久无码老湿机漫画| 免费中文熟妇在线影片密芽| 国产成人亚洲影院在线| 一二三四在线看日本高清| 日韩人妻无码AⅤ中文字幕| 激情欧美日韩一区二区| JAPANESE五十路熟女| 小洞饿了想吃大香肠| 妺妺窝人体色www在线观看婚闹| 国产SUV精品一区二区88L| 一本久久知道综合久久| 色偷偷久久一区二区三区| 久久AV高潮AV无码AV喷吹| 波多野结衣高清一区二区三区| 亚洲国模337P人艺体艺术| 日本丰满少妇高潮XXXX| 久久国产精品99久久人人澡| 俄罗斯美女做爰XXXⅩ啪啪| 一区二区国产高清视频在线|