什么是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
相关产品推荐
相关产品推荐

