gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

JavaScript中神奇的this到底是啥?

this 關鍵字是 JavaScript 中最復雜的機制之一。它是一個很特別的關鍵字,被自動定義在所有函數的作用域中。但是即使是非常有經驗的 JavaScript 開發者也很難說清它到底指向什么。

this是什么?

指向函數本身?

光從字面意思上來看,很容易讓人覺得this就是指向函數本身,事實上真是這樣嗎?我們可以看一個例子。

function foo() {     this.count = this.count ? this.count + 1 : 1; }  for (let i = 0; i < 5; i++) {     foo(); } console.log(foo.count); // undefined

可以看到,foo.count輸出的并不是我們期待的5,而是一開始賦值的0。也就是說this其實并沒有指向函數本身

指向作用域?

還有一種比較常見的誤解是,this指向了函數的作用域。

function foo() {     var a = 2;     bar(); } function bar() {     console.log(this.a); }  foo(); // undefined

這段代碼中,bar在foo中運行,輸出this.a得到的卻是undefined。也就是說this也不是指向函數的作用域的

這也不是,那也不是,this到底是什么呢?在函數執行過程中,會創建一個執行上下文(一個記錄),this就是這個上下文中的一個屬性,在執行過程中用到。而this的指向則是取決于函數在哪里被調用。

this的綁定規則

this的綁定有四條可以遵循的規則,下面將一一介紹。

1.默認綁定

獨立函數調用,非嚴格模式下,指向window;嚴格模式下指向undefined。 這里說的獨立函數可以理解成除開后面三種情況的一般函數調用。

// 非嚴格模式 var name = 'Willem'; function foo() {     console.log(this.name); } foo(); // Willem  // 執行時啟用嚴格模式 (function() {     'use strict';     foo(); // Willem     bar(); // Cannot read property 'name' of undefined })();  // 函數體使用嚴格模式 function bar() {     'use strict';     console.log(this.name); }

上述代碼中,分別在普通環境中輸出Willem,說明指向的確實是window對象。需要特別注意的一點是:嚴格模式下指向undefined指的是函數體內啟用了嚴格模式,而不是調用時。

2. 隱式綁定

隱式綁定說的是,在函數執行時,是否被某個對象擁有或包含。換句話說,在函數運行時,是否是作為某個對象的屬性的方式運行的,這樣說還是不是很清楚,來個栗子:

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

示例中,foo被當做了obj的一個屬性進行執行,此時obj作為了函數的上下文,此時this指向了obj,this.a等價于obj.a。在對象屬性鏈式的調用中,只有最后一層會對調用位置產生影響,也就是說最后一層會影響this指向。

有很多前端的小伙伴面試時或許還見過這樣的題:

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

這是隱式綁定最常見的一個問題,隱式丟失:被隱式綁定的函數會丟失綁定對象。雖然bar是對obj.foo的一個引用,但實際上引用的還是foo函數本身,bar函數就是一個獨立函數的調用,參考第一條,此時this指向了window|undefined

還有一種經典的回調函數的this指向問題也是隱式丟失。

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

小結:在隱式綁定中,賦值的情況下(回調是隱式賦值)需要特別注意隱式丟失的問題 。

3. 顯示綁定

JavaScript中的Function提供了兩個方法callapply,傳入的第一個參數是一個對象,會把this綁定到這個對象。如果是傳入的是一個原始值(字符串、數字、布爾),會被轉換成它的對象形式(new String(), new Boolean(), new Number())。

function foo() {     console.log(this.a); } var obj = {     a: 1 }; foo.call(obj); // 1

雖然我們可以使用callapply顯式指定this的指向,但是還是會存在丟失綁定的問題。可以通過所謂的硬綁定(bind函數)來解決,這里就不過多贅述了。

4. new

最后要介紹的是使用new來做this的綁定的修改,有手動實現過new的童鞋應該比較清楚,js中的new和其他語言的new完全不同。
new的執行過程:

  1. 創建一個空對象
  2. 當前空對象執行原型對接
  3. 返回函數執行結果或者當前這個空對象
function Foo(a) {     this.a = a; }  var bar = new Foo(2); bar.a; // 2

使用 new 來調用函數時,我們會構造一個新對象并把它綁定到 函數調用中的 this上。

優先級

最后簡單說一下優先級的關系:new > 顯示綁定 > 隱式綁定 > 默認綁定。

推薦學習:《javascript基礎教程

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
国产精品久久久久久久久电影网| 国产日产欧美视频| 久久久久久久久久久久久久国产| 香蕉视频在线网址| 91精品无人成人www| 很污的网站在线观看| 男女激情免费视频| www.xxx麻豆| 亚洲精品少妇一区二区| 久久久99精品视频| 91嫩草国产丨精品入口麻豆| 中文字幕精品在线播放| 99精品视频网站| 狠狠干视频网站| 超碰成人免费在线| 波多野结衣家庭教师在线播放| av网站大全免费| 日本不卡在线观看视频| 成人小视频在线看| 激情五月俺来也| 香蕉视频xxx| 男人的天堂视频在线| 日韩人妻无码精品久久久不卡| 久久久久久久免费视频| 日韩 欧美 视频| aaaaaa亚洲| 天天操精品视频| 国产精品12345| 天天操天天爱天天爽| 99亚洲精品视频| 欧美视频在线观看网站| 性生交免费视频| aaa免费在线观看| 欧美日韩在线视频一区二区三区| 成人亚洲视频在线观看| 污免费在线观看| www.日本在线播放| 国产福利精品一区二区三区| 欧美xxxx吸乳| 中文字幕国产传媒| 国产毛片久久久久久国产毛片| 中文字幕乱码人妻综合二区三区| 久久久久久综合网| 国产真实乱子伦| 警花观音坐莲激情销魂小说| 国产成人手机视频| 在线观看免费视频污| 国产免费一区二区三区视频| 91香蕉国产线在线观看| 亚洲精品视频导航| 日b视频免费观看| 91视频福利网| 一区二区三区免费播放| 一本久道高清无码视频| 国产又粗又爽又黄的视频| 成人免费无码av| 国产一级爱c视频| 日本中文字幕在线视频观看| 成人综合久久网| 最新中文字幕2018| 春日野结衣av| 男女激情免费视频| 99er在线视频| 黄色一级大片免费| 亚洲第一综合网站| 无套内谢丰满少妇中文字幕| 久久久精品麻豆| 欧美大尺度做爰床戏| 黑森林精品导航| 五月婷婷六月合| 天天干在线影院| 伊人成人222| 女女同性女同一区二区三区按摩| 911福利视频| 亚洲一区二区三区四区精品| 韩国一区二区在线播放| 国产欧美精品一二三| 五月天开心婷婷| 中国老女人av| 日韩精品在线中文字幕| 天堂…中文在线最新版在线| 免费网站在线观看视频 | 在线观看18视频网站| 四虎4hu永久免费入口| 99久久久无码国产精品性色戒| 青青草原网站在线观看| 日本国产在线播放| 成人一区二区三| 一级黄色片国产| www.男人天堂网| 免费在线激情视频| 99中文字幕在线| 欧美日韩黄色一级片| 国产精品久久久久9999小说| 高清av免费看| 91成人在线视频观看| 99精品视频在线看| 五月婷婷之综合激情| 激情图片qvod| 成人午夜视频免费在线观看| www.夜夜爽| 免费网站在线观看视频| 欧美在线观看视频网站| 黑人巨大国产9丨视频| 国产精品亚洲a| 国产人妻人伦精品| 五月天激情播播| 亚洲理论电影在线观看| 国产免费又粗又猛又爽| 日韩成人手机在线| 尤物国产在线观看| 91视频最新入口| 黄色录像特级片| 91制片厂毛片| 国产极品粉嫩福利姬萌白酱| 国产美女18xxxx免费视频| 免费无遮挡无码永久视频| 亚洲欧美日韩网站| 污版视频在线观看| 欧美牲交a欧美牲交| 国产精品12p| 小泽玛利亚视频在线观看| 久久综合色视频| 欧美一区二区三区综合| 一级片免费在线观看视频| 日韩手机在线观看视频| 欧美日韩亚洲第一| 黄色大片中文字幕| 大陆av在线播放| 成年人网站国产| 亚洲色成人www永久在线观看| 亚洲网中文字幕| jizz欧美性11| 亚洲少妇第一页| 欧美性大战久久久久xxx| 18黄暴禁片在线观看| 久久av高潮av| 国产免费内射又粗又爽密桃视频| 亚洲精品免费一区亚洲精品免费精品一区| 青青草原av在线播放| 国产h视频在线播放| 欧美xxxxx在线视频| 天天碰免费视频| 欧美成人三级在线播放| 97超碰成人在线| 国产高清999| 菠萝蜜视频在线观看入口| 欧美做受777cos| 国产v片免费观看| 国产成人亚洲精品无码h在线| 日本黄网站免费| 国产又粗又长又爽又黄的视频| 99九九精品视频| 国产一区二区三区播放| www.亚洲视频.com| 成人免费无码av| 亚洲av无日韩毛片久久| 警花观音坐莲激情销魂小说 | 国产精品欧美激情在线观看| 日本女优爱爱视频| 国产xxxxhd| 成年网站在线免费观看| 中文字幕成人在线视频| 欧美a级免费视频| 国产一区视频免费观看| www.亚洲自拍| 欧美日韩一区二区在线免费观看 | 日韩一级免费片| 免费网站在线观看视频| 啊啊啊国产视频| 色呦呦网站入口| 国产精品69页| 99热一区二区三区| 国内自拍视频网| 国产精品国产亚洲精品看不卡| 天天色综合社区| 丁香六月激情网| 97人人爽人人| 日本a在线免费观看| 91aaa精品| 亚洲精品自拍网| 男人的天堂99| www.夜夜爱| 午夜av中文字幕| 亚洲老女人av| jizz欧美激情18| 黄色a级片免费| 久在线观看视频| 久青草视频在线播放| 超碰97免费观看| 在线一区二区不卡| av污在线观看| 国产一区视频免费观看| 日本免费黄视频| 男人和女人啪啪网站| 欧美这里只有精品| 国产自产在线视频| 亚洲乱码日产精品bd在线观看| 欧美性猛交xxxx乱大交91| 日韩av自拍偷拍|