国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

JS中this關鍵字的區別

2024-04-27 15:11:01
字體:
來源:轉載
供稿:網友

JS與java在this關鍵字上的處理是不同的,Java可以很清晰的明白this指代的是哪個對象,而js則會產生很多歧義,接下來,我們一步一步解釋JS中不同函數或閉包里面的this關鍵字。

讀以下代碼之前,請先百度《JS變量作用域鏈》,來幫助理解。

重點:this關鍵字是誰調用指向誰!

普遍的函數調用: 最后一行代碼是完整的調用寫法,可以輕易看出調用者為window,所以方法里面的this指代window

function testThis1(){ console.info("Test1="+this);}testThis1();// 簡單的寫法window.testThis1();//完整的寫法

嵌套函數調用: 外部函數將返回嵌套函數fn,此時并沒有直接調用fn,而是在最外層才調用,所以結果也同上,是由window調用fn,fn里面的this為window

function testThis2(){ var fn = function(){ console.info("Test2="+this); } return fn;}var temp = testThis2();// 將一個函數賦值給變量temptemp();// 正式調用函數window.temp();// 完整寫法

對象的函數調用: 將函數賦值給對象的屬性,作為對象的方法調用,此時調用應該是obj1.action(),明顯的看出調用者變為了obj1,又由于所有全局變量都是window的屬性,所以可以像最后一行那樣調用函數,打印的this結果都是obj1

var obj1 = { action:function(){ console.info("Test3="+this); }};obj1.action();// 對象函數調用window.obj1.action();// 完整寫法

調用對象函數返回的函數: 當對象函數里面返回函數時,實際上并沒有立即調用這個函數,而是返回到最外層進行調用,所以這個嵌套函數的調用者仍然是window,但是對象函數調用者為obj2。也就是說action()里面this指代obj2,匿名嵌套函數this指代window

var obj2 = { action:function(){ console.info(this);// 打印obj2 var that = this;// 通常可以緩存this也就是obj2,然后內層函數就可以直接用that,而不是使用this了 return function(){ console.info(that);// 打印obj2 console.info(this);// 打印window }; }}obj2.action();// 返回一個函數,但此時沒有調用該函數obj2.action()();// 正式調用函數,該代碼最后的效果應該類似于下面的代碼(function(){console.info(this);})();
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安康市| 定兴县| 荣成市| 开江县| 黄大仙区| 二连浩特市| 阆中市| 策勒县| 江孜县| 大安市| 普定县| 蓝田县| 雅江县| 琼海市| 云南省| 穆棱市| 河东区| 修水县| 宁波市| 晋城| 屯昌县| 澳门| 荥经县| 青阳县| 清水县| 合作市| 塘沽区| 阳春市| 贵阳市| 奉节县| 普格县| 苍山县| 呼图壁县| 门头沟区| 保亭| 汉川市| 迭部县| 西畴县| 吐鲁番市| 汨罗市| 合山市|