Javascript 这在不同类型的回调中是什么?
我们知道我们必须在回调中保留Javascript 这在不同类型的回调中是什么?,javascript,Javascript,我们知道我们必须在回调中保留this的值,以便在适当的上下文中执行它们。例如: someArr.forEach(function(el) { console.log(this); }); someBtn.addEventListener('click', function() { console.log(this); }); 这里当我们使用使用strict时,该将指窗口或未定义 但当我们添加一个事件时,例如: someArr.forEach(function(el) {
this
的值,以便在适当的上下文中执行它们。例如:
someArr.forEach(function(el) { console.log(this); });
someBtn.addEventListener('click', function() {
console.log(this);
});
这里当我们使用使用strict
时,该将指窗口或未定义
但当我们添加一个事件时,例如:
someArr.forEach(function(el) { console.log(this); });
someBtn.addEventListener('click', function() {
console.log(this);
});
此处此
指单击的按钮。为什么在这个回调中,我们不必绑定任何函数,而在前一种情况下,我们必须显式地绑定它。
我可能错了,所以请澄清我的疑问。此的值
当您将函数传递给addEventListener
或forEach
时,您正在设置由其他人编写的代码来调用它
该代码将根据编写它的人的意图以不同的方式调用该函数。单击中的此回调与附加事件处理程序的上下文中的此
回调不同(即此处:this&&someBtn.addEventHandler
)。这是一个不同的。它正在被改变。如果你把它绑起来,这个
在事件处理程序中不会引用按钮。但我不明白在我提出问题的上述情况下……为什么在addEventListener的情况下,我们在回调中有元素的引用,甚至没有将其绑定到回调???@JotWaraich-因为设计addEventListener
API的人认为那就是useful@Jot因为要调用事件处理程序,将this
设置为事件发生的元素addEventListener会处理这个问题。因此,我们可以说,它还取决于回调的类型,它将拥有什么作为this
insideNo。这取决于调用回调的代码。