箭頭函式this指向問題

2022-09-21 15:30:14 字數 1423 閱讀 7674

箭頭函式表示式的語法比函式表示式更簡潔,並且沒有自己的thisargumentssupernew.target。箭頭函式表示式更適用於那些本來需要匿名函式的地方,並且它不能用作建構函式。

箭頭函式的this指向的是箭頭函式所在作用域的this指向

向來看一下這個物件,我在外部定義了乙個全域性變數identity,並且在內部myobject也定義了乙個identity。

然後分別是四個獲取identity的函式

/**

***********************************

*/

identity = 'the window';

let myobject = ,

getid3()

}, getid4() }

myobject.getid(); // the window

myobject.getid2(); // my object

myobject.getid3()(); // the window

myobject.getid4()(); // my object

(myobject.getid2 = myobject.getid2)(); // the window

當時我對於myobject.getid();的結果非常意外,因為我一開始對箭頭函式this指向的理解是:箭頭函式的this在定義的時候繫結。所以我理所當然的認為此時應該列印my object,然而並沒有。。。

然後我再去找部落格學習的時候,看到了這一篇:es6箭頭函式的this指向詳解 - 知乎 (zhihu.com)

原來箭頭函式的this指向是定義它時所在的作用域的this指向,這時我們看myobject.getid(),定義getid()時的作用域其實就是全域性作用域。所以this指向應當是window

明白了這一點以後我又寫了乙個myobject.getid4()函式。注意看這個函式的定義,呼叫它會返回乙個箭頭函式,再呼叫那個箭頭函式就會列印my object

因為當我們呼叫myobject.getid4()時,getid4()內部的this指向是指向myobject的,因此當它返回在其內部定義的箭頭函式時,箭頭函式定義時的作用域是getid4()的作用域,所以其this指向就是myobject

箭頭函式this指向問題

前言 線下筆試碰到的題目,發現學習掌握的不透徹,所以回來填坑 const obj1 const obj2 console.log obj1.func.bind obj2 輸出結果為 剛開始很疑惑結果,於是做了個對比 const obj1 const obj2 console.log obj1.fun...

箭頭函式 this指向問題

1.為什麼要用箭頭函式 2.箭頭函式分析this指向 1.this指向呼叫函式的物件 function a a 2.this指向window var a 2 這裡不能換成let a 2 因為window.獲取不到a的值 var obj obj.b 總結 1.箭頭函式在定義的時候生效 而普通函式則在呼...

箭頭函式中的this指向問題

箭頭函式沒有自己的 this,它內部的 this 是外層 塊的 this,也就是定義箭頭函式時所在的物件。es6 標準入門裡面對箭頭函式 this 的指向有如下說法 函式體內的 this 物件就是定義時所在的物件,而不是呼叫時所在的物件。一般this 物件的指向是可變的,但是在箭頭函式中,this ...