日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JavaScript 的 this 原理

瀏覽:189日期:2023-11-10 17:06:34
一、問題的由來

學懂 JavaScript 語言,一個標志就是理解下面兩種寫法,可能有不一樣的結果。

var obj = { foo: function () {}};var foo = obj.foo;// 寫法一obj.foo()// 寫法二foo()

上面代碼中,雖然obj.foo和foo指向同一個函數,但是執行結果可能不一樣。請看下面的例子。

var obj = { foo: function () { console.log(this.bar) }, bar: 1};var foo = obj.foo;var bar = 2;obj.foo() // 1foo() // 2

這種差異的原因,就在于函數體內部使用了this關鍵字。很多教科書會告訴你,this指的是函數運行時所在的環境。對于obj.foo()來說,foo運行在obj環境,所以this指向obj;對于foo()來說,foo運行在全局環境,所以this指向全局環境。所以,兩者的運行結果不一樣。

這種解釋沒錯,但是教科書往往不告訴你,為什么會這樣?也就是說,函數的運行環境到底是怎么決定的?舉例來說,為什么obj.foo()就是在obj環境執行,而一旦var foo = obj.foo,foo()就變成在全局環境執行?

本文就來解釋 JavaScript 這樣處理的原理。理解了這一點,你就會徹底理解this的作用。

二、內存的數據結構

JavaScript 語言之所以有this的設計,跟內存里面的數據結構有關系。

var obj = { foo: 5 };

上面的代碼將一個對象賦值給變量obj。JavaScript 引擎會先在內存里面,生成一個對象{ foo: 5 },然后把這個對象的內存地址賦值給變量obj。

JavaScript 的 this 原理

也就是說,變量obj是一個地址(reference)。后面如果要讀取obj.foo,引擎先從obj拿到內存地址,然后再從該地址讀出原始的對象,返回它的foo屬性。

原始的對象以字典結構保存,每一個屬性名都對應一個屬性描述對象。舉例來說,上面例子的foo屬性,實際上是以下面的形式保存的。

JavaScript 的 this 原理

{ foo: { [[value]]: 5 [[writable]]: true [[enumerable]]: true [[configurable]]: true }}

注意,foo屬性的值保存在屬性描述對象的value屬性里面。

三、函數

這樣的結構是很清晰的,問題在于屬性的值可能是一個函數。

var obj = { foo: function () {} };

這時,引擎會將函數單獨保存在內存中,然后再將函數的地址賦值給foo屬性的value屬性。

JavaScript 的 this 原理

{ foo: { [[value]]: 函數的地址 ... }}

由于函數是一個單獨的值,所以它可以在不同的環境(上下文)執行。

var f = function () {};var obj = { f: f };// 單獨執行f()// obj 環境執行obj.f()四、環境變量

JavaScript 允許在函數體內部,引用當前環境的其他變量。

var f = function () { console.log(x);};

上面代碼中,函數體里面使用了變量x。該變量由運行環境提供。

現在問題就來了,由于函數可以在不同的運行環境執行,所以需要有一種機制,能夠在函數體內部獲得當前的運行環境(context)。所以,this就出現了,它的設計目的就是在函數體內部,指代函數當前的運行環境。

var f = function () { console.log(this.x);}

上面代碼中,函數體里面的this.x就是指當前運行環境的x。

var f = function () { console.log(this.x);}var x = 1;var obj = { f: f, x: 2,};// 單獨執行f() // 1// obj 環境執行obj.f() // 2

上面代碼中,函數f在全局環境執行,this.x指向全局環境的x。

JavaScript 的 this 原理

在obj環境執行,this.x指向obj.x。

JavaScript 的 this 原理

回到本文開頭提出的問題,obj.foo()是通過obj找到foo,所以就是在obj環境執行。一旦var foo = obj.foo,變量foo就直接指向函數本身,所以foo()就變成在全局環境執行。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品欧美日韩精品| 日韩在线成人| 欧美一级二级三级视频| 首页国产欧美久久| 欧美亚洲日本精品| 国产在线日韩精品| 日韩欧美自拍| 尤物精品在线| 日本v片在线高清不卡在线观看| 日韩中文字幕无砖| 国产精品4hu.www| 亚洲一区资源| 偷拍欧美精品| 日本免费新一区视频| 亚洲色图综合| 国产精品毛片aⅴ一区二区三区| 国产91在线播放精品| 99久精品视频在线观看视频| 香蕉人人精品| 国产成人免费| 国产精品xx| 日本欧美国产| 欧美一区二区三区久久| 911亚洲精品| 在线精品观看| 国产欧美69| 欧美激情福利| 久久久久久自在自线| 国产乱码午夜在线视频| 免费成人在线影院| 日韩av二区| 久久国产精品久久久久久电车 | 久久国产高清| 久久国产精品免费一区二区三区| 国产精品最新| 日韩精品永久网址| 久久久久97| 亚洲精品2区| 91视频一区| 国产精品黄色| 午夜久久一区| 国产日韩欧美一区二区三区在线观看 | 欧美日中文字幕| 亚洲激情久久| 国模精品一区| 免费在线观看日韩欧美| 麻豆视频一区二区| 中文在线不卡| 国产精品theporn| 日本成人在线网站| 午夜精品一区二区三区国产| 亚洲www免费| 国产福利91精品一区二区| 国产精品多人| 麻豆精品蜜桃视频网站| 日韩av中文字幕一区二区三区| 99精品在线观看| 国产精品分类| 视频一区二区三区中文字幕| 亚洲天堂久久| аⅴ资源天堂资源库在线| 综合激情网站| 亚洲资源在线| 免费成人在线视频观看| 日韩不卡免费高清视频| 国产精品一在线观看| 日韩中文字幕亚洲一区二区va在线 | 麻豆久久久久久久| 久久天堂精品| 欧美国产美女| 天海翼精品一区二区三区| 蜜桃久久久久| 91精品91| 日韩欧美在线中字| 国产精品白丝久久av网站| 亚洲免费高清| 日韩欧美1区| 欧美日韩夜夜| 亚洲乱码一区| 1024精品一区二区三区| 日韩二区三区在线观看| 日韩成人午夜精品| 国产亚洲欧美日韩精品一区二区三区 | 欧美香蕉视频| 久久免费福利| 国产精品一区免费在线| 91精品国产自产观看在线| 99国产精品99久久久久久粉嫩| 久久高清免费| 日韩久久电影| 日韩国产欧美| 伊人久久国产| 国产日产高清欧美一区二区三区| 亚洲欧美网站| 国产精品日本| 好看不卡的中文字幕| 成人av动漫在线观看| 国产韩日影视精品| 亚洲三级av| 日韩国产在线一| 国产在线|日韩| 九色porny丨国产首页在线| 国产a亚洲精品| 免费国产自久久久久三四区久久| 日韩在线卡一卡二| 91在线成人| 久久av国产紧身裤| 国产精品成人a在线观看| 午夜av不卡| 好看不卡的中文字幕| 亚洲三级精品| 亚洲婷婷在线| 欧美日韩国产在线观看网站 | 欧美1区2区3区| 国产精品一站二站| 精品一区91| 亚洲综合婷婷| 欧洲毛片在线视频免费观看| 欧美日韩尤物久久| 日韩av在线免费观看不卡| 另类亚洲自拍| 黄色成人91| 激情自拍一区| 91在线成人| 亚洲精品无播放器在线播放| 精品中文一区| 香蕉视频亚洲一级| 激情久久99| 精品久久国产一区| 91久久中文| 亚洲高清影视| 日本一区二区免费高清| 亚洲精品成a人ⅴ香蕉片| 99精品视频在线观看免费播放| 国产日韩高清一区二区三区在线 | 久久精品国产网站| 日韩高清不卡一区| 在线亚洲精品| 视频一区中文| 婷婷亚洲五月| 美女少妇全过程你懂的久久| 亚洲一级网站| se01亚洲视频| av在线最新| 黑森林国产精品av| 国产欧美日韩一级| 国产乱子精品一区二区在线观看| 日本成人在线视频网站| 亚洲影院天堂中文av色| 午夜视频一区二区在线观看| 日本亚洲最大的色成网站www| 天堂资源在线亚洲| 夜夜嗨一区二区| 国产在线日韩| 欧美日韩国产在线观看网站 | 久久国产精品免费一区二区三区| 综合激情视频| 欧美日韩亚洲一区| 欧美成人一二区| 色婷婷久久久| 亚州av乱码久久精品蜜桃| 日韩动漫一区| 国产成人精品一区二区免费看京| 美女福利一区二区三区| 免费久久精品| 日本午夜精品久久久| 高清av一区| 影院欧美亚洲| 美女视频黄免费的久久| 欧美亚洲在线日韩| 日本a口亚洲| 久久国产免费| 7m精品国产导航在线| 日韩大片在线| 青草av.久久免费一区| 精品久久久亚洲| 午夜在线精品偷拍| 久久伊人久久| 蜜桃一区二区三区在线观看| 久久久久黄色| 在线日韩中文| 福利欧美精品在线| 久久国产精品久久久久久电车| 麻豆91精品视频| 国产精品日本| 精品久久久久中文字幕小说| av不卡在线| 精品99在线| 亚洲精品美女| 综合国产视频| 亚洲先锋成人| 精品日韩在线| 麻豆一区二区99久久久久| 玖玖精品视频| 99tv成人| 成人午夜网址| 国产精品嫩模av在线| 亚洲毛片一区| 日韩精品一级二级| 好看的av在线不卡观看|