js中的this指針前端面試題(蘇寧總部-蘇寧易購前端面試)

之前博主去蘇寧總部面試的分享漏了一個this指針的面試題,整理如下,問了兩個方面。

有興趣的猿友可以 點擊這裏 查看之前面試分享。

 

this指向有哪幾種情況:

  • 全局作用域或者普通函數自執行中this指向全局對象window

  • 事件函數內部的this指向事件源:注意在事件函數中如果包含普通函數,普通函數自執行後,內部this還是指向window

  • 對象方法調用時,this指向調用的對象

1、全局作用域 / 普通函數中的this

this對象是在運行時基於函數的執行環境綁定的:在全局函數中,this指向的是window;當函數被作爲某個對象的方法調用時,this就等於那個對象。

//全局作用域
console.log(this);   //Window

//普通函數
function fn(){
    console.log(this); //Window
}

2、事件函數中的this指向事件源

3、對象方法調用時,this指向調用的對象

let obj = {
    name : "lanlan",
    fn : function(){
        console.log(this);
    },
    lacy:{
        name : "didi",
        fn : function(){
            let num = 10;
            console.log(this);
       }
    }
};

obj.fn();   //obj
obj.dudu.fn();   //lacy

4、類實例來調用函數時,this指向實例

class B {
  fn() {
    console.log(this)
  }
}
var b = new B()
var fun = b.fn
b.fn()  // 指向 b
fun()  // undefined

ES6 下的 class 內部默認採用的是嚴格模式,fun不會指定全局對象爲默認調用對象

5、 ES6箭頭函數的this

箭頭函數中的this始終指向箭頭函數定義時的離this最近的一個函數,如果沒有最近的函數就指向window

箭頭函數的this是在定義函數時綁定的,不是在執行過程中綁定的。簡單的說,函數在定義時,this就繼承了定義函數的對象。

補充:

箭頭函數和普通函數相比,有以下幾個區別,在開發中應特別注意:

  • 不綁定 arguments 對象,也就是說在箭頭函數內訪問 arguments 對象會報錯;

  • 不能用作構造器,也就是說不能通過關鍵字 new 來創建實例;

  • 默認不會創建 prototype 原型屬性;

  • 不能用作 Generator() 函數,不能使用 yeild 關鍵字。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章