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

addEventListener中未显式传参的logKey为何能获取e.code?

事件回调的参数获取原理

你观察到的现象是DOM事件系统的标准行为,核心逻辑非常好理解:

  • 调用addEventListener传入logKey时,你只是把函数的引用交给浏览器存起来,并没有立刻执行这个函数,所以不需要手动加括号传参。
  • 当你按下键盘、keydown事件被触发时,浏览器会自动执行之前存好的logKey回调,执行时会自动把当前生成的键盘事件对象作为第一个参数传入函数——这个传参动作是浏览器内部按照Web标准完成的,不需要你在绑定监听的时候手动传入。

你可以把浏览器内部的事件触发逻辑近似理解为下面的伪代码,看完就通了:

// 浏览器内部运行逻辑(仅作原理演示,不是真实源码)
function whenKeyDownHappens(/* 浏览器自己生成的事件对象 */ keyEvent) {
  // 挨个执行你之前绑定的所有keydown回调,自动把事件对象传进去
  logKey(keyEvent);
}

哪怕你定义回调的时候不写e这个形参,事件对象也照样会被传进来,只是你没有声明变量接收它而已,比如下面的写法同样能拿到按键code:

function logKey() {
  // 没写形参也能通过内置arguments拿到传入的第一个参数,也就是事件对象
  log.textContent += ` ${arguments[0].code}`;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:24:15