es6中新增了箭頭函式這種語法,箭頭函式以其簡潔性和方便獲取this的特性。下面來總結一下他們之間的區別:
普通函式下的this:
箭頭函式中的this:
看下面這段**:
function a()因為a是乙個全域性函式,也就是掛載在window物件下的,所以a(),等價於window.a();a();
var obj = );定時器中的函式,由於沒有預設的宿主物件,所以this指向window} }
obj.say();
var obj = ,此時say的宿主環境是obj,所以say裡面的this是obj,定時器中的函式, 由於沒有預設的宿主物件,所以預設this指向windowsay: function () );
} }
obj.say();
嚴格模式下的this:
function test()在嚴格模式下,沒有直接呼叫者的函式中的this是 undefinedtest();
"use strict";有直接呼叫者的this是它的呼叫者var obj=
};
obj.say();
箭頭函式中的this:
var obj = );此時的 this繼承自obj, 指的是定義它的物件obj, 而不是 window!} }
obj.say();
var obj = )} f1();
} }
obj.say()
因為f1定義時所處的函式 中的 this是指的 obj, settimeout中的箭頭函式this繼承自f1,所以不管有多層巢狀,都是 obj
var obj = )結果: 都是 window,因為 箭頭函式在定義的時候它所處的環境相當於是window, 所以在箭頭函式內部的this函式window};
f1();
} } obj.say()
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...