JavaScript中的匿名函數在實際開發中經常使用到。但是,匿名函數中的this總是會讓開發者頭疼,因為它指向的對象不是如開發者所預期的那樣。接下來就聊一聊,在JavaScript中,匿名函數中的this到底指向什么,以及開發者應該如何正確使用它。
首先,當在全局環境中使用匿名函數時,this所指向的對象就是全局對象window:
var foo = function() { console.log(this); }; foo(); // window
在這個例子中,匿名函數foo中的this就指向了全局對象window,因為匿名函數是在全局環境中運行的。
但是,當匿名函數作為對象的方法被調用時,this所指向的對象就是該對象本身:
var person = { name: "John", sayHi: function() { console.log(this); } }; person.sayHi(); // {name: "John", sayHi: ?}
在這個例子中,匿名函數sayHi作為對象person的方法被調用時,其中的this就指向了person對象本身。
另外,在事件處理函數中,this所指向的對象就是觸發事件的元素:
var btn = document.querySelector("button"); btn.onclick = function() { console.log(this); }; // 當點擊按鈕時輸出<button>按鈕</button>
在上面的例子中,當點擊按鈕時,其中的匿名函數就會被調用,而其中的this就指向了觸發事件的元素——按鈕本身。
總之,在JavaScript中,匿名函數中的this所指向的對象是動態的,它取決于函數的調用方式。如果函數作為對象的方法被調用,那么其中的this就指向該對象本身;如果函數在全局環境中運行,那么其中的this就指向全局對象window;如果函數被用作事件處理函數,那么其中的this就指向觸發事件的元素。因此,開發者在使用匿名函數時,一定要注意this指向的對象,以免出現錯誤。