javascript - JS : Why is the Event object accessible in event handlers without accepting it in a parameter?

标签 javascript events arguments language-design

在回顾我过去写的一些 JS 时,我注意到我正在尝试访问 event.keyCode在事件处理程序中,但我的函数的唯一参数是 e ,不是event 。所以,虽然我希望得到 "Uncaught ReferenceError: event is not defined" ,我反而发现我的脚本按预期工作(至少在 Chrome 中)。

document.body.addEventListener('keyup', function(e) {
    if (event.keyCode === 13) {
        // ...
    }
});

事实上,如果我放置 console.log(e === event)在该处理程序中,我得到 true 。 经过一些测试(在 a JS Bin 中),似乎这必须适用于每个此类事件,使得 event另一种“狡猾”的局部变量,如 arguments 出现在函数中而不在参数中要求它。

这让我想知道:

  1. 这是仅有的两个“狡猾”的局部变量吗?
  2. 此行为是否属于 event在 Chrome 中与其他浏览器和 JS 环境一致吗?

最佳答案

根据浏览器的不同,有一个全局 event引用当前触发事件的变量。

关于javascript - JS : Why is the Event object accessible in event handlers without accepting it in a parameter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43421398/

相关文章:

javascript - 没有提及的命令

javascript - 样式化的组件输入失去对变化的关注

javascript - document.write来自mysql数据库的javascript并处理转义

docker - kubectl日志显示 'standard_init_linux.go:211: exec user process caused “no such file or directory”'

java - 我可以获得 ...args 变量吗?我想制作 MyLog(String format, Object...args)

无法将两个作为文件名的命令行参数传递给函数

javascript - 重置 AngularJS 表单元素

c# - 将 Rx 超时与 FromEventPattern Observer 结合使用

python - 为什么 ** 不在函数调用中解压 kwargs?

javafx tableview oneditcommit 不会被自定义 cellfactory 调用?