箭頭函式表示式的語法比函式表示式更簡潔,並且沒有自己的this、arguments、super、new.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 ...