箭頭函式this問題

2021-08-19 16:01:50 字數 1220 閱讀 4665

普通函式中的this:

1. this總是代表它的直接呼叫者(js的this是執行上下文), 例如 obj.func ,那麼func中的this就是obj

2.在預設情況(非嚴格模式下,未使用 'use strict'),沒找到直接呼叫者,則this指的是 window (約定俗成)

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

箭頭函式中的this

箭頭函式沒有自己的this, 它的this是繼承而來; 預設指向在定義它時所處的物件(宿主物件),而不是執行時的物件,定義它的時候,可能環境是window; 箭頭函式可以方便地讓我們在 settimeout ,setinterval中方便的使用this。

作用域鏈:當在函式中使用乙個變數的時候,首先在本函式內部查詢該變數,如果找不到則找其父級函式,最後直到window,全域性變數預設掛載在window物件下。

我們常見的window的屬性和方法有: alert, location,document,parseint,settimeout,setinterval等,window的屬性預設可以省略window字首!

例子1:此時的 this繼承自obj, 指的是定義它的物件obj, 而不是 window!

var obj = );

}} obj.say(); // obj

例子2:因為f1定義時所處的函式 中的 this是指的 obj, settimeout中的箭頭函式this繼承自f1, 所以不管有多層巢狀,都是 obj

var obj = )

} f1();

}}obj.say()

例子3:都是 window,因為 箭頭函式在定義的時候它所處的環境相當於是window, 所以在箭頭函式內部的this函式window

var obj = )

};f1();

}}obj.say()

例子4:嚴格模式下,沒有宿主呼叫的函式中的this是undefined!!!所以箭頭函式中的也是undefined!

var obj = )

};f1(); }}

obj.say()

使用箭頭函式,可以讓我們解決一些在匿名函式中 this指向不正確的問題; 但是要注意在和普通函式混合的時候,this的指向可能是window !

箭頭函式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 function foo 100 var id 21 foo 21 這時候foo的this指向window foo.call 42 foo的this指向並且箭頭函式時向上找最近的定義時上層作用域 var ...