2017-08-07 30 views
-2

我們知道我們必須在回調中保留this的值,以便在適當的上下文中執行它們。例如:這在不同類型的回調?

someArr.forEach(function(el) { console.log(this); }); 

這裏this將參照窗口或不確定時,我們使用use strict

但是,當我們例如添加事件:

someBtn.addEventListener('click', function() { 
     console.log(this); 
}); 

這裏this指按鈕被按下。在這種回調中,我們不需要綁定任何這個,而在前一種情況下,我們必須明確地綁定它。 我可能是錯的,請澄清我的疑問。

+0

在你的'click'回調函數中'this'與你在附加事件處理程序的上下文(即this'this && someBtn.addEventHandler')中的'this'不同。這是一個不同的'這個'。它正在改變。如果你綁定了它,事件處理程序中的'this'就不會引用這個按鈕。 – deceze

回答

2

thisdepends on how the function is called

當您通過功能addEventListenerforEach那麼你設置東西被其他人寫入稱之爲代碼。

該代碼將以不同的方式調用函數,具體取決於編寫它的人的意圖。

+0

但我沒有得到,在上面的情況下,我有問題....爲什麼在addEventListener的情況下,我們在回調中的元素的引用,甚至沒有綁定到回調? –

+0

@JotWaraich - 因爲任何設計'addEventListener' API的人都會覺得有用 – Quentin

+0

@Jot因爲事件處理函數將會被設置爲發生事件的元素的'this'。 'addEventListener'負責這個。 – deceze