更新時(shí)間:2019-12-09 16:25:57 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2573次
如果大家接觸到的編程語言足夠多,就會(huì)發(fā)現(xiàn)幾乎在大部分編程語言里邊都有this關(guān)鍵字,恐怕最難理解的要屬于JavaScript中的this了。
不同的環(huán)境this不同,不同的對(duì)象this不同。
你曾經(jīng)有沒有被面試中的this問題難倒過?今天知了堂的蛋糕哥哥給大家?guī)韙his的面試干貨,結(jié)合案例讓你輕松解決面試中的this問題。
什么是this
this是js的一個(gè)關(guān)鍵字,它指代的是一個(gè)對(duì)象的引用。
當(dāng)一個(gè)函數(shù)被調(diào)用時(shí),會(huì)創(chuàng)建一個(gè)執(zhí)行上下文,此執(zhí)行上下文會(huì)記錄這個(gè)函數(shù)在哪里被調(diào)用(調(diào)用棧)、函數(shù)的調(diào)用方法、傳入的參數(shù)等信息。而this就是記錄這個(gè)函數(shù)在哪里被調(diào)用的,在哪里被調(diào)用,這個(gè)函數(shù)里的this就指向誰。 所以,this指向取決于函數(shù)的調(diào)用方式。
this關(guān)鍵字的作用
this 提供了一種更優(yōu)雅的方式來隱式“傳遞”一個(gè)對(duì)象引用,代碼設(shè)計(jì)將更利于復(fù)用。
總結(jié) 簡(jiǎn)單的話:this返回的當(dāng)前函數(shù)被調(diào)用的那個(gè)對(duì)象 。
this的使用場(chǎng)景
1.全局使用 this === window(嚴(yán)格模式下IIFEthis為undefined)
2.函數(shù)當(dāng)中 在全局調(diào)用這個(gè)fn() this === window
3.在方法當(dāng)中使用 this === 調(diào)用當(dāng)前這個(gè)函數(shù)的所在的對(duì)象
4.構(gòu)造函數(shù),this指向的是 new 創(chuàng)建出來的實(shí)例對(duì)象
5.通過 bind,call,apply 操作符來顯示的設(shè)置 this的指向
6.ES6的箭頭函數(shù),沒有自己的this,父作用域的this
常見面試題分享
1.面試題一
var name = "window"
var obj = {
name:"my Object",
getName:function(){
console.log(this.name);
return function(){
return this.name
}
}
}
var fun = obj.getName(); //輸出?
fun()//輸出?
答案:第一個(gè)輸出的my Object,第二個(gè)輸出的是window,小伙伴們答對(duì)了么?
詳解:
首先第一個(gè)很好解釋,getName方法是obj調(diào)用的,所以根據(jù)使用場(chǎng)景3,方法誰調(diào)用,this執(zhí)行誰。 關(guān)鍵是第二個(gè),調(diào)用了getName后返回一個(gè)匿名函數(shù),把這個(gè)函數(shù)的引用賦值給了fun,然后fun在window環(huán)境下被調(diào)用,所以根據(jù)場(chǎng)景2,此時(shí)的this為window(有小伙伴是不是想到閉包呢?跟閉包一點(diǎn)關(guān)系都沒有喲~)
var x = 3;
var foo = {
x: 2,
baz: {
x: 1,
bar: function() {
return this.x;
}
}
}
var go = foo.baz.bar;
foo.baz.bar()//輸出?
go()//輸出?
答案:第一個(gè)輸出1,第二個(gè)輸出3(.運(yùn)算符優(yōu)先級(jí)要高于())。
如果你答對(duì)了,恭喜你基本掌握了this的調(diào)用。
其實(shí)在開發(fā)中,并不會(huì)去寫像面試那么繞的東西。面試題是為了更深入的洞悉應(yīng)聘者的掌握情況,所以也有很大的參考意義!
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“JavaScript面試總結(jié):輕松搞定this問題”的內(nèi)容,希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)推薦
最新最全java面試題及答案(初級(jí)到高級(jí))
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)