为何window.event与事件回调参数e值相同?浏览器此行为原因解析
为什么事件回调中window.event和参数e完全一致?
这是现代浏览器为兼容旧时代代码留下的历史行为,具体原因拆解如下:
兼容旧IE的历史遗留:早期IE浏览器没有标准的事件参数传递机制,开发者只能通过
window.event获取当前触发的事件对象。后来DOM标准规定事件对象通过回调参数(也就是你代码里的e)传递,但为了让那些依赖window.event的老代码能正常运行,现代浏览器(Chrome、Safari、Firefox都遵循这个逻辑)会在触发事件回调的临时阶段,把事件对象同步挂载到window.event上。临时挂载的生命周期:浏览器只会在事件回调执行的过程中让
window.event指向当前事件对象;一旦回调执行完毕,就会立刻把window.event重置为undefined,避免不同事件的对象互相干扰。手动赋值后的行为变化:如果你提前手动给
window.event赋了值,浏览器会判定你要自行管理这个属性,就不会再在回调触发时自动覆盖它了,这时候回调里的window.event就是你手动设置的内容,自然和参数e不一致。
代码示例
document.addEventListener("click", function(e) { console.log("event clicked: ", e); // PointerEvent console.log(window.event); // PointerEvent })
内容的提问来源于stack exchange,提问作者hopper01
相关产品推荐
相关产品推荐

