如果未将事件对象传递给回调,则该事件对象从何处来?

时间:2018-10-11 14:04:43

标签: javascript dom-events

请考虑以下代码段:

document.querySelector("input").addEventListener("input", function(event){
    document.querySelector("p").textContent = event.target.value;
});

如果我删除了event参数,该代码仍然可以按预期工作:

document.querySelector("input").addEventListener("input", function(){
    document.querySelector("p").textContent = event.target.value;
});

但是如何?我最好的猜测是,它可以通过addEventListener中的词法作用域以某种方式获得,但是我不确定。谁能确认?

JSFiddle

1 个答案:

答案 0 :(得分:3)

请参见MDN

  

只读的Window属性事件返回当前由网站代码处理的事件。在事件处理程序的上下文之外,该值始终是未定义的。

     

您应避免在新代码中使用此属性,而应使用传递到事件处理程序函数中的Event。该属性不是   受到普遍支持,即使受到支持也会给您的代码带来潜在的脆弱性。


  

我最好的猜测是,它可以通过addEventListener中的词法作用域获得,但是我不确定。

这是一个全局变量:window.event。它只是在处理事件时才存在。

兼容性:IE和Google Chrome支持event的{​​{1}}属性,而Firefox不支持。