Javascript “的行为;这";在forEach和addEventListener方法中

Javascript “的行为;这";在forEach和addEventListener方法中,javascript,object,foreach,this,addeventlistener,Javascript,Object,Foreach,This,Addeventlistener,编辑:这不是关于“This”关键字在不同上下文中的一般行为的问题。我的问题是,这两种行为背后是否有一个共同的底层逻辑——是因为“this”仅在调用对象的方法时绑定到该对象,而forEach()是数组的方法吗? 为什么当我使用: var tag = ["a","b","c"]; tag.forEach(function () { console.log(this) }); element.getElementById("id").addEventListener("click", fun

编辑:这不是关于“This”关键字在不同上下文中的一般行为的问题。我的问题是,这两种行为背后是否有一个共同的底层逻辑——是因为“this”仅在调用对象的方法时绑定到该对象,而forEach()是数组的方法吗?
为什么当我使用:

var tag = ["a","b","c"];

tag.forEach(function () { 
  console.log(this)
});
element.getElementById("id").addEventListener("click", function () {
  console.log(this.value);
});
引用全局对象,因为函数绑定到全局对象,但当我使用时:

var tag = ["a","b","c"];

tag.forEach(function () { 
  console.log(this)
});
element.getElementById("id").addEventListener("click", function () {
  console.log(this.value);
});

指的是
id
元素,即使它在函数中?这是因为
forEach
是数组的方法,而不是对象的方法吗?

在DOM事件处理程序
中,此
被设置为触发事件的元素:

进一步阅读: