作用域this指向

普通函數:
1、this總是代表着他的直接調用者,例如obj.fun(),那麼fun()中的this就是obj;

2、調用的時候,沒有任何前綴,則指向window,new的時候,指向new出來的對象;

3、在默認情況下(非嚴格模式),沒找到直接調動者,則this指向window;

4、在嚴格模式下,沒有直接調用者的函數中的this是undefined;

5、使用call、apply、bind綁定的,this指向綁定的對象。

箭頭函數:
1、this對象,就是定義時所在的對象,而不是使用時所在的對象;!!!

2、不可以當做構造函數,即不能使用new;

3、不可以使用arguments對象,該對象在函數體內不存在,如果要用可以rest參數替代;

4、不可以使用yield命令,因此箭頭函數不能使用Generator函數;

5、返回對象時必須在對象外面加上括號。

上面四點,第一個尤爲注意。普通函數this指向可變,但是箭頭函數是固定的。


看一個不太好理解的字面量對象中的this

var obj = {
    num: 2,
    fun1() { return this.num*2 },
    fun2: ()=> { return this.num*5 }
}
obj.fun1() //4,this指向fun1的調用者obj
obj.fun2() // NaN,fun2定義的環境是window

obj.fun2() // NaN,fun2定義的環境是window
上圖,看結果
在這裏插入圖片描述

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