国产探花免费观看_亚洲丰满少妇自慰呻吟_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);})();
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蒙阴县| 太湖县| 府谷县| 启东市| 睢宁县| 韶山市| 息烽县| 平定县| 辉南县| 达日县| 炉霍县| 万全县| 方城县| 会泽县| 蒙自县| 北碚区| 绿春县| 雷山县| 嵩明县| 荥阳市| 津市市| 兰考县| 佛学| 常宁市| 兴隆县| 峡江县| 长治市| 四会市| 博客| 南安市| 张家界市| 司法| 金湖县| 清远市| 屏山县| 阜康市| 沅江市| 麦盖提县| 柞水县| 资溪县| 会宁县|