js中的this指向問題

2021-10-09 12:56:23 字數 1250 閱讀 8708

es6中新增了箭頭函式這種語法,箭頭函式以其簡潔性和方便獲取this的特性。下面來總結一下他們之間的區別:

普通函式下的this:

箭頭函式中的this:

看下面這段**:

function a()   

a();

因為a是乙個全域性函式,也就是掛載在window物件下的,所以a(),等價於window.a();

var obj = );  

} }

obj.say();

定時器中的函式,由於沒有預設的宿主物件,所以this指向window

var obj = ,  

say: function () );

} }

obj.say();

此時say的宿主環境是obj,所以say裡面的this是obj,定時器中的函式, 由於沒有預設的宿主物件,所以預設this指向window

嚴格模式下的this:

function test()   

test();

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

"use strict";   

var obj=

};

obj.say();

有直接呼叫者的this是它的呼叫者

箭頭函式中的this:

var obj = );  

} }

obj.say();

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

var obj = )  

} f1();

} }

obj.say()

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

var obj = )  

};

f1();

} } obj.say()

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

JS中this指向問題

解析器在呼叫函式時,每次都會向函式內部傳遞進乙個隱含的引數,這個隱含的引數就是this,this指向的是乙個物件,這個物件我們稱之為函式執行的上下文物件,根據函式的呼叫方式不同,this會指向不同的物件.簡單來說一下函式中this指向問題,1.this是什麼?任何函式本質上都是通過某個物件來呼叫的,...

JS中this指向問題

函式內部的this之和函式的呼叫方式有關,和函式的定義方式沒有關係functionfn fn windowvar obj obj.fn obj functionfn 或者可以這樣寫自呼叫函式 functionfn div document.queryselector div div.onclick ...

JS中this指向問題

與其它語言相比,js的this關鍵字的指向稍微有點差別。一 全域性環境 首選我們要明確一點,在全域性環境中 在任意函式體外部 無論是嚴格模式還是非嚴格模式,this都指向window。下面,我們來通過幾個例子理解一下。示例1 console.log this 這裡的this在全域性域下,指向wind...