You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

什么是event object?它是事件触发前存在还是触发时创建的?

事件对象创建时机解答

首先直接给出结论:现代浏览器遵循DOM标准实现的事件对象,都是事件触发时为本次事件单独创建的全新实例,不会复用预先生成的全局对象。

具体规则说明

  • W3C DOM 事件规范明确要求:每一次事件触发流程启动时,都要先创建一个对应事件类型的实例,比如点击事件生成MouseEvent实例、键盘事件生成KeyboardEvent实例、自定义事件生成CustomEvent实例,这个实例会作为参数传递给所有匹配的事件监听器。
  • 旧版IE(IE8及更早版本)曾用过全局window.event的设计:所有事件共用同一个全局事件对象,每次事件触发时修改这个对象的属性值,这也是部分老教程里会提到"event对象是全局的"的来源,但这套逻辑早已被废弃,所有现代浏览器(Chrome、Firefox、Safari、Edge等)都不再兼容这套旧规则。

验证示例

你可以直接运行这段代码验证:

// 存储两次点击事件的对象引用
let event1, event2;
document.body.addEventListener('click', e => {
  if (!event1) {
    event1 = e;
    e.customTag = '第一次点击的标记';
  } else {
    event2 = e;
    console.log('两个事件对象是否相同:', event1 === event2); // 输出 false
    console.log('第二次事件对象是否有自定义标记:', 'customTag' in event2); // 输出 false
  }
})

连续点击页面两次后可以看到两个打印结果,足以证明两次触发拿到的是完全独立的对象。


内容的提问来源于stack exchange,提问作者mango33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:06:03