關於ES6中箭頭函式this和普通函式this指向

2021-10-01 10:51:18 字數 1217 閱讀 5026

this代表他的直接呼叫者,例如obj.func,那麼func的this就是obj

在預設情況下(非嚴格模式),沒直接找到呼叫者,則this指的是window

在嚴格模式下,沒有直接呼叫者的函式中的this是 undefined

結果為window

匿名函式,say函式沒有預設的宿主物件,所以預設this指向window

如何使用這個物件的引用?

用乙個 變數提前把正確的 this引用儲存 起來, 我們通常使用that = this, 或者 _this = this來儲存我們需要的this指標!

結果為obj

window.val = 1;

var obj =

};obj.dbl();

var func = obj.dbl;

func();

輸出 2 4 8 8

<1> 12行**呼叫

val變數在沒有指定物件字首,預設從函式中找,找不到則從window中找全域性變數

即 val *=2 就是 window.val *= 2

this.val預設指的是 obj.val ;因為 dbl()第一次被obj直接呼叫

<2>14行**呼叫

func() 沒有任何字首,類似於全域性函式,即 window.func呼叫,所以

第二次呼叫的時候, this指的是window, val指的是window.val

第二次的結果受第一次的影響

結果是:undefined

此時的this是定義它的物件,即繼承父級的this,obj呼叫了say()方法,故父級中的this指的是obj,而非window

結果:都是obj

f1繼承父級this指代的obj,不管f1有多層箭頭函式巢狀,都是obj.

結果:window,window

第乙個this:f1呼叫時沒有宿主物件,預設是window

第二個this:繼承父級的this,父級的this指代的是window.父級為say(),this指代的是window

ES6中箭頭函式的作用

那為什麼在es6中引入了箭頭函式呢?最主要的目的就是解決this指標的問題。我們知道在es6中,我們可以建立乙個class,如果我們預設在其裡面加入乙個函式的話,其必須在呼叫的時候,必須繫結this指標,否則不能訪問當前類的例項裡面的屬性。下面舉乙個具體的例子,為什麼其能解決this指標的問題。比如...

ES6中箭頭函式中的this指向

箭頭函式的this指向與一般的function函式定義不同 箭頭函式的this定義 是在定義函式的時候繫結,而不是在執行的時候繫結 何為執行時繫結 來看下面的例子 let a 1 let obj obj.sayhi 輸出的是2一般的定義函式執行的時候決定this的執行,我們不難看出obj.say 的...

ES6中箭頭函式this指向的問題

箭頭函式在es6中用的很常見,剛開始我還覺得這有什麼,就是簡寫了一下而已 後來用習慣之後就覺得是真滴方便 在說之前先簡單的概括一下。箭頭函式和普通函式的區別如下。普通函式 根據呼叫我的人 誰呼叫我,我的this就指向誰 箭頭函式 根據所在的環境 我再哪個環境中,this就指向誰 先來看乙個簡單的例子...