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一区二区
日本一本二本在线观看| 亚洲欧美日本一区二区| 国产卡一卡二在线| 小泽玛利亚视频在线观看| 浮妇高潮喷白浆视频| 国产精品www在线观看| 免费网站永久免费观看| 成人免费a级片| 国产www免费| 国产淫片免费看| 美女网站免费观看视频| 中文久久久久久| 免费网站在线观看黄| 日本三级福利片| 日韩精品免费一区| 波多野结衣之无限发射| 亚洲 高清 成人 动漫| 国产性xxxx18免费观看视频| 免费大片在线观看| 成年网站在线播放| 天堂网成人在线| 日韩 欧美 视频| 久久精品香蕉视频| 中文字幕剧情在线观看| 免费在线看黄色片| 成人3d动漫一区二区三区| 日本中文字幕观看| 日本中文字幕亚洲| 免费看污污网站| 国产精品三级一区二区| 日本成人中文字幕在线| 亚洲成人动漫在线| 国产精品99久久免费黑人人妻| 欧美在线aaa| 男人天堂手机在线视频| 日本人视频jizz页码69| 91看片淫黄大片91| 成人性视频欧美一区二区三区| 日本一二三四区视频| 欧美牲交a欧美牲交| 日韩精品视频网址| 苍井空浴缸大战猛男120分钟| 免费黄频在线观看| 成人性视频欧美一区二区三区| www.午夜色| 日韩精品你懂的| 国产午夜福利100集发布| 毛片毛片毛片毛| 欧美日韩第二页| 色多多视频在线播放| 久久亚洲中文字幕无码| 国产三级三级看三级| 久草视频国产在线| 99亚洲精品视频| 欧美日韩一区二区三区69堂| 国产二区视频在线播放| 久操手机在线视频| 国产福利片一区二区| 最新国产黄色网址| 亚洲五月天综合| av观看免费在线| 69堂免费视频| www一区二区www免费| 草草视频在线免费观看| 天堂av在线中文| 蜜桃视频成人在线观看| 久久精品久久99| 咪咪色在线视频| 免费观看国产视频在线| 久久精品国产精品亚洲精品色| 免费av不卡在线| 久久免费看毛片| 日本国产中文字幕| 国产va亚洲va在线va| 777av视频| 欧美成人xxxxx| 国产免费人做人爱午夜视频| 亚洲综合在线网站| 手机免费av片| 在线观看成人免费| 日韩激情视频一区二区| 国产乱子伦农村叉叉叉| 日本新janpanese乱熟| 手机在线成人免费视频| 搡的我好爽在线观看免费视频| 看一级黄色录像| 欧美日韩精品在线一区二区 | 日本激情视频在线| 欧美成人精品欧美一级乱| 国产高清视频网站| 亚洲成人动漫在线| 91av资源网| 一二三av在线| 日韩网站在线免费观看| 国产av人人夜夜澡人人爽| 久久婷婷中文字幕| 亚洲精品蜜桃久久久久久| 国产三区在线视频| 日韩视频在线免费播放| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 国产一二三四在线视频| 国产欧美一区二| 日日噜噜夜夜狠狠久久丁香五月| 男的插女的下面视频| 茄子视频成人免费观看| 特级毛片在线免费观看| 人妻精品无码一区二区三区| xxxx在线免费观看| 男人添女人下面高潮视频| 黄色手机在线视频| 国产日韩欧美精品在线观看| 怡红院亚洲色图| 可以在线看的av网站| 视频区 图片区 小说区| 虎白女粉嫩尤物福利视频| 大桥未久一区二区| 欧美日韩怡红院| 美女黄色免费看| 三区视频在线观看| 黑人粗进入欧美aaaaa| 99在线观看视频免费| 性久久久久久久久久久久久久| 18岁视频在线观看| 欧美大黑帍在线播放| 人妻少妇精品久久| 亚洲最新免费视频| 在线观看免费视频高清游戏推荐| 每日在线观看av| 女人床在线观看| 欧美h视频在线观看| 欧美wwwwwww| 五月天婷婷亚洲| 日韩大片一区二区| 亚洲国产精品三区| 韩国视频一区二区三区| 无码人妻丰满熟妇区毛片| 日韩免费视频播放| 国产精品专区在线| 九九爱精品视频| 国产成人精品视频免费看| 欧美大片在线播放| 97成人在线观看视频| 欧洲黄色一级视频| 国产97色在线 | 日韩| 久久久久久www| 日韩欧美一区二| 免费看国产曰批40分钟| 五月激情五月婷婷| 99国产精品久久久久久| 中文字幕1234区| 国产卡一卡二在线| 欧美日韩福利在线| 日韩精品视频一区二区在线观看| 国产在线青青草| 午夜国产一区二区三区| 亚洲天堂网站在线| 99久久久精品视频| 国产免费成人在线| 在线能看的av网站| 免费观看国产视频在线| 欧美日韩福利在线| 国产免费999| 日本福利视频导航| 成人毛片一区二区| 日韩在线视频在线观看| 色国产在线视频| 无码av天堂一区二区三区| 男女av免费观看| 欧美性受xxxx黒人xyx性爽| 日韩黄色片在线| 亚洲 欧美 日韩系列| 欧美 国产 精品| 人人爽人人av| 免费一级淫片aaa片毛片a级| 国产精品动漫网站| 国产免费一区二区三区四在线播放| 成年人深夜视频| 亚洲欧美视频二区| 男人的天堂狠狠干| 污免费在线观看| 少妇性l交大片| 国产一区二区四区| 亚洲午夜精品一区| 青青青在线播放| 国产色一区二区三区| 亚洲最大天堂网| 国产三级三级三级看三级| 五月丁香综合缴情六月小说| 不卡中文字幕在线观看| 日韩中文字幕免费在线| 日韩黄色短视频| 真人做人试看60分钟免费| 日本中文字幕精品—区二区| 日韩久久一级片| 91免费视频网站在线观看| 激情五月六月婷婷| 永久免费在线看片视频| 久久婷婷中文字幕| 亚洲精品在线视频播放| 看看黄色一级片|