函式 箭頭函式的this指向

2021-10-25 09:25:42 字數 1718 閱讀 7274

在箭頭函式中,this與封閉詞法環境的this保持一致。在全域性**中,它將被設定為全域性物件:

var globalobject =

this

;var foo =((

)=>

this);

console

.log

(foo()

=== globalobject)

;// true

// 接著上面的**

// 作為物件的乙個方法呼叫

var obj =

;console

.log

(obj.

foo(

)=== globalobject)

;// true

// 嘗試使用call來設定this

console

.log

(foo.

call

(obj)

=== globalobject)

;// true

// 嘗試使用bind來設定this

foo = foo.

bind

(obj)

;console

.log

(foo()

=== globalobject)

;// true

無論如何,foo 的 this 被設定為他被建立時的環境(在上面的例子中,就是全域性物件)。這同樣適用於在其他函式內建立的箭頭函式:這些箭頭函式的this被設定為封閉的詞法環境的。

// 建立乙個含有bar方法的obj物件,

// bar返回乙個函式,

// 這個函式返回this,

// 這個返回的函式是以箭頭函式建立的,

// 所以它的this被永久繫結到了它外層函式的this。

// bar的值可以在呼叫中設定,這反過來又設定了返回函式的值。

var obj =};

// 作為obj物件的乙個方法來呼叫bar,把它的this繫結到obj。

// 將返回的函式的引用賦值給fn。

var fn = obj.

bar();

// 直接呼叫fn而不設定this,

// 通常(即不使用箭頭函式的情況)預設為全域性物件

// 若在嚴格模式則為undefined

console

.log(fn

()=== obj)

;// true

// 但是注意,如果你只是引用obj的方法,

// 而沒有呼叫它

var fn2 = obj.bar;

// 那麼呼叫箭頭函式後,this指向window,因為它從 bar 繼承了this。

console

.log

(fn2()

()== window)

;// true

在上面的例子中,乙個賦值給了 obj.bar的函式(稱為匿名函式 a),返回了另乙個箭頭函式(稱為匿名函式 b)。因此,在 a 呼叫時,函式b的this被永久設定為obj.bar(函式a)的this。當返回的函式(函式b)被呼叫時,它this始終是最初設定的。在上面的**示例中,函式b的this被設定為函式a的this,即obj,所以即使被呼叫的方式通常將其設定為 undefined 或全域性物件(或者如前面示例中的其他全域性執行環境中的方法),它的 this 也仍然是 obj 。

箭頭函式this的指向

什麼是箭頭函式,箭頭函式是es6的新特性,其出現就是為了更好的表示 代替 函式 箭頭函式 arg1,arg2 當箭頭函式只有乙個引數 arg1 console.log arg1 箭頭函式隱式return arg1 arg1 等價於 arg1 return arg1箭頭函式的this不同於以上所有情況...

箭頭函式this的指向

什麼是箭頭函式,箭頭函式是es6的新特性,其出現就是為了更好的表示 代替 函式 箭頭函式 arg1,arg2 當箭頭函式只有乙個引數 arg1 console.log arg1 箭頭函式隱式return arg1 arg1 等價於 arg1 return arg1箭頭函式的this不同於以上所有情況...

this指向箭頭函式詳解

本文參考 this 指的是你的函式執行時所在的環境 作用域 全域性環境下 console.log this.document document true 在全域性環境下this始終指向全域性物件,無論是否嚴格模式 在瀏覽器中,this指向window物件 console.log this windo...