JS:为什么在事件处理程序中可以访问Event对象而不在参数中接受它?

时间:2017-04-15 01:58:12

标签: javascript events arguments language-design

回顾过去我写的一些JS,我注意到我试图在事件处理程序中访问event.keyCode,但我的函数唯一的参数是e,而不是{{ 1}}。因此,虽然我希望获得event,但我发现我的脚本按预期工作(至少在Chrome中)。

"Uncaught ReferenceError: event is not defined"

事实上,如果我在该处理程序中放置document.body.addEventListener('keyup', function(e) { if (event.keyCode === 13) { // ... } }); ,我会得到console.log(e === event)。 经过一点点测试(在a JS Bin中),似乎这必须适用于每一个这样的事件,使true另一种“狡猾的”局部变量,如arguments出现在函数中,而不会询问对于它在参数中。

这让我想知道:

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

1 个答案:

答案 0 :(得分:1)

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