色综合老司机第九色激情 _中文字幕日韩av资源站_国产+人+亚洲_久久久精品影院_久久久视频免费观看_欧美激情亚洲自拍_亚洲成av人片在线观看香蕉_热草久综合在线_欧美极品第一页_2020国产精品自拍

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 你真的知道JavaScript中的this嗎?

你真的知道JavaScript中的this嗎?

來源:千鋒教育
發布人:wjy
時間: 2022-09-26 09:52:42 1664157162

  介紹

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

  什么是"this"?

  調用函數時,將創建一個執行環境,this 在運行時根據函數的執行環境綁定。它允許函數在內部引用上下文中的執行變量,使函數編程更加優雅和簡潔。

  看看下面的代碼,想想為什么不同的調用方法會打印出不同的結果。

JavaScript中的this1

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

  “this”的約束規則

  默認綁定

  默認綁定規則下,函數的運行環境為全局環境,this默認指向Window。

  默認綁定規則如下:

  1、this指向Window的全局函數

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

JavaScript中的this2

  2、獨立函數調用this指向Window

  獨立的函數調用,即直接調用函數,如 foo()。

JavaScript中的this3

  這里的foo默認鏈接到Window,相當于window.foo()。根據函數的隱式綁定規則,誰調用誰就指向誰。這里的 this 指向 Window。結果如下:

JavaScript中的this4

  同樣,如果嵌套函數中直接調用的函數也是獨立的函數調用,那么this也指向Window:

JavaScript中的this5

  在上面的代碼中,子函數son也嵌套在對象obj的方法foo中。當直接調用子方法時,子里面的this指向Window,所以子函數里面的this.a結果是全局變量a,也就是10。

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

JavaScript中的this6

  3、對于自執行函數調用,this指向window

  自執行函數,顧名思義,就是定義函數后自動調用的函數,自執行函數的this指向如下代碼:

JavaScript中的this7

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

  4、閉包里面的this指向Window

  閉包可以理解為一個函數內部定義的函數,可以訪問其他函數的內部變量。當我們查看閉包中的 this 點時,我們可以看到 this 指向 Window。

JavaScript中的this8

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

JavaScript中的this9

  fn 是 obj.foo() 返回的函數。fn 函數是獨立調用的,this 指向 Window。

  隱式綁定

  當函數作為方法調用時,this指向函數的直接父對象,稱為隱式綁定。

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

JavaScript中的this10

  上面的代碼也是對 foo 函數的調用。調用方法不同,結果不同。

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

  隱式綁定丟失

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

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

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

JavaScript中的this11

  2、隱式綁定的函數作為參數傳給函數,丟失了this點。

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

JavaScript中的this12

  3、內置對象setTimeout和setInterval函數的隱式綁定丟失

  內置函數 setTimeout 和 setInterval 的 this 默認指向 Window。

JavaScript中的this13

  對了,當setTimeout或者setInterval的第一個參數是箭頭函數時,this會指向上層的函數執行環境。代碼如下:

JavaScript中的this14

  顯式綁定

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

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

JavaScript中的this15

  關于硬裝訂

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

JavaScript中的this16

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

JavaScript中的this17

  “new”綁定

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

  當我們彼此認識時,我們主要做以下事情:

  a、創建一個新對象

  b、讓這一點指向新對象并執行構造體

  c、將新對象的 proto 屬性設置為指向構造的原型對象

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

JavaScript中的this18

  在嚴格模式下,“this”指向一個問題。

  1.獨立調用函數的內部“this”是“undefined”

JavaScript中的this19

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

JavaScript中的this20

  總結

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

  讓我們總結一下,其約束原則如下:

  默認綁定,this指向全局Window。

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

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

  new綁定,構造new的一個實例,this指向new的實例對象。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
色综合老司机第九色激情 _中文字幕日韩av资源站_国产+人+亚洲_久久久精品影院_久久久视频免费观看_欧美激情亚洲自拍_亚洲成av人片在线观看香蕉_热草久综合在线_欧美极品第一页_2020国产精品自拍
在线观看日韩高清av| 欧美午夜精品久久久久久孕妇| 中文字幕亚洲综合久久菠萝蜜| 日韩毛片精品高清免费| 欧美亚洲动漫制服丝袜| 在线区一区二视频| 亚洲大片精品永久免费| 久久精品二区亚洲w码| 欧美精品三级在线观看| 精品一区二区三区在线播放视频 | 欧美哺乳videos| 成人性生交大片| 国产精品久久久久影院亚瑟 | 欧美在线观看禁18| 久久久综合激的五月天| 成人免费毛片片v| 亚洲二区在线视频| 欧美v国产在线一区二区三区| 国产精品99久久久久久久vr| 精品福利视频一区二区三区| 亚洲曰韩产成在线| 日韩欧美综合一区| 欧美日韩国产精选| 一区二区三区四区在线播放| 日韩欧美的一区| 欧美日韩激情一区二区| 99视频国产精品| 国产精品 欧美精品| 香港成人在线视频| 久久免费偷拍视频| 26uuu色噜噜精品一区| 色狠狠一区二区三区香蕉| 国产亚洲一区二区三区在线观看| 欧美日韩国产成人在线免费| 91蜜桃网址入口| 亚洲不卡一区二区三区| 中文字幕中文字幕一区| 精品国产乱码久久久久久夜甘婷婷 | 欧美大片拔萝卜| 欧美色倩网站大全免费| 国产ts人妖一区二区| 免费高清成人在线| 国产真实乱子伦精品视频| 日本美女视频一区二区| 久久成人久久爱| 免费日韩伦理电影| 国内国产精品久久| 蜜臂av日日欢夜夜爽一区| 激情综合五月婷婷| 成人网在线免费视频| 成人国产一区二区三区精品| 丁香婷婷综合激情五月色| 樱桃国产成人精品视频| 亚洲精品在线网站| 国产精品国产三级国产aⅴ中文 | 成人爽a毛片一区二区免费| 色综合 综合色| 欧美精品777| 国产午夜精品一区二区| 一区二区三区在线高清| 麻豆91在线播放免费| 午夜久久久久久电影| 1024亚洲合集| 国产精品一区二区在线播放 | 国产传媒久久文化传媒| 欧美精选一区二区| 国产精品免费丝袜| 国产aⅴ精品一区二区三区色成熟| 岛国一区二区在线观看| 欧美精品成人一区二区三区四区| 亚洲人成网站精品片在线观看| 国产成人综合网| 欧美一级免费大片| 亚洲高清免费视频| 久久久久99精品一区| 国产精品欧美久久久久一区二区| 久久精品视频在线看| 久久丁香综合五月国产三级网站| 色综合天天天天做夜夜夜夜做| 欧美亚洲精品一区| 亚洲一区二区欧美激情| www.在线欧美| 亚洲成人一区二区在线观看| 欧美日韩精品欧美日韩精品一| 亚洲国产精品精华液ab| 成人精品小蝌蚪| 亚洲欧美另类综合偷拍| 欧美日韩精品欧美日韩精品 | 欧美性受xxxx黑人xyx性爽| 亚洲小说欧美激情另类| 欧美日韩一区不卡| 日韩影视精彩在线| 日韩久久精品一区| 欧美丝袜自拍制服另类| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产欧美一区二区精品性色| 日本韩国精品在线| 精品亚洲porn| 亚洲尤物视频在线| 中文字幕在线不卡一区二区三区| 欧美一区二区三区视频在线| thepron国产精品| 久久av中文字幕片| 国产精品人成在线观看免费| 精品夜夜嗨av一区二区三区| 亚洲一区在线观看免费观看电影高清| 久久久久久久综合狠狠综合| 欧美精品久久久久久久多人混战 | 亚洲精品乱码久久久久久日本蜜臀| 91麻豆精品91久久久久同性| 成人国产精品免费观看动漫| 麻豆精品在线视频| 午夜激情一区二区三区| 亚洲欧美电影院| 欧美一区二区三区色| 欧美性生活一区| 91麻豆123| 99视频精品在线| 日本高清视频一区二区| 宅男在线国产精品| 成人精品电影在线观看| 国产·精品毛片| 久久99精品一区二区三区三区| 久久99精品久久只有精品| 日本欧美一区二区| 亚洲国产日韩在线一区模特| 亚洲成人av一区二区三区| 天天综合色天天| 亚洲一区二区三区四区不卡| 视频一区免费在线观看| 日本在线播放一区二区三区| 亚洲成人先锋电影| 美国av一区二区| 99久久精品一区| 欧美精品在线观看一区二区| 制服丝袜亚洲播放| 久久午夜羞羞影院免费观看| 国产精品久线在线观看| 欧美aaaaaa午夜精品| 国产精品自产自拍| 在线观看视频一区二区| 日韩精品一区二区三区三区免费| 国产精品嫩草影院av蜜臀| 亚洲国产另类av| 国产+成+人+亚洲欧洲自线| 91精品啪在线观看国产60岁| 中文字幕亚洲在| 一级特黄大欧美久久久| 高清国产午夜精品久久久久久| 欧美喷潮久久久xxxxx| 一区二区三区四区五区视频在线观看| 久久99精品久久久久久国产越南| 欧美图片一区二区三区| 亚洲一区精品在线| 一本色道久久加勒比精品 | 欧美一级专区免费大片| 亚洲激情自拍视频| 色综合天天综合网天天狠天天| 久久婷婷综合激情| 国产精品一区三区| 久久精品一区蜜桃臀影院| 日韩avvvv在线播放| 欧美性生活久久| 亚洲午夜在线电影| 91精品国产一区二区| 污片在线观看一区二区| 欧美日韩视频在线观看一区二区三区| 国产精品青草久久| 日本中文字幕不卡| 日韩va欧美va亚洲va久久| 欧美乱妇15p| 国产激情一区二区三区桃花岛亚洲| 欧美国产日韩在线观看| 色菇凉天天综合网| 国产电影一区在线| 一区二区在线观看av| 久久久久综合网| 欧美男女性生活在线直播观看| 国产一区二区三区四区五区入口| 亚洲欧美国产高清| 欧美经典一区二区| 日韩一区和二区| 91丨porny丨中文| 99久久国产免费看| 99久久99久久精品免费看蜜桃| 日韩激情视频在线观看| 亚洲欧洲综合另类在线| 久久精品一区二区三区不卡牛牛| 国产老肥熟一区二区三区| 一区二区三区 在线观看视频| 国产日韩v精品一区二区| 欧美一区二区三区公司| 国产一区二区在线视频| 亚洲国产精品麻豆| 日韩电影在线一区二区三区| 亚洲va国产va欧美va观看| 亚洲成av人在线观看| 欧美精品一区二区精品网| 欧美成人乱码一区二区三区| 91精品在线免费|