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