普通函式 與 箭頭函式 this指向問題

2021-10-03 07:21:14 字數 1049 閱讀 5452

讓我們先講下箭頭函式的this指向,再在普通函式的例子中具體對比。

箭頭函式的this與誰呼叫無關,this指向執行上下文。執行上下文可以理解為當前**的執行環境。

箭頭函式本身所在的物件為obj,而obj的執行上下文是window,因此輸出的是20。

const obj =};

var a =20;

console.

log(obj.

add())

;// 20

let f = obj.add;

console.

log(f(

));// 20

指向它的直接呼叫者

第乙個輸出的呼叫者是obj,所以它輸出的是obj的a,為10.

第二個輸出的呼叫者沒有呼叫,直接f()執行。預設它的呼叫者是window,指代的是window的a,為undefined.

const obj =,}

;console.

log(obj.

add())

;// 10

let f = obj.add;

console.

log(f(

));// undefined

函式直接加括號執行,上下文是window。(因為obj.fun() 後,直接返回乙個函式。再執行返回的函式,相當於沒有呼叫者了,預設window呼叫)

let obj =}}

;//注: obj.fun()再呼叫的時候直接加括號,沒有打點呼叫

console.

log(obj.

fun()(

));//undefined

var a =5;

console.

log(obj.

fun()(

));//5

定時器呼叫函式,上下文是window

let obj =)}

};var a =20;

obj.fn(

)

箭頭函式 普通函式中的this指向

this指向在箭頭函式和普通函式中的表現是不同的。1 箭頭函式 首先要明白的是箭頭函式的this指標是固定的,就是箭頭函式被定義時其所在環境的物件 因為箭頭函式其實自己是沒有this指標的,其this指標是判定了其直接外層的函式的this指標 這裡說的是函式而不是物件,因為物件不直接形成單獨的作用域...

箭頭函式和普通函式的this指向

對於this的指向問題還是有點不太清除,這裡做一下整理,方便以後檢視 普通函式的this 1.普通函式的this指向的是它的呼叫者,誰呼叫這個this,this就指向誰,比如obj,fn,這裡fn最外層的this就指向obj 2.如果沒有呼叫者,那這個this就指向window 3.在嚴格模式下 設...

箭頭函式與普通函式以及this指向問題

沒有引數只有單條語句 var fun consoloe.log 1 fun 乙個引數單條語句,可以省略 var fun a console.log 1 a就是傳入的單個引數多個引數多條語句 var fun a,b 返回的是物件要加 var fun var b return 1 var b new b...