2017-08-07 55 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