为什么javascript handleEvent方法可以访问省略了事件参数的事件?

时间:2019-05-08 15:41:30

标签: javascript dom-events

根据MDN doc handleEvent方法,将event作为其单个参数,但是在此示例中:

Codepen

html代码:

<button id="btn">Click here!</button>  

javascript代码:

const buttonElement = document.getElementById('btn');

buttonElement.addEventListener('click', function () {
  alert(event.type);
});

回调handleEvent函数尚无参数,但可以访问事件(它会警告“单击”)。

它如何工作?

是否有任何引用明确指出可以省略event参数?

1 个答案:

答案 0 :(得分:2)

在JavaScript中,当您引用变量时,在检查全局范围之前,它将首先在本地范围内查找。在浏览器中,所有全局范围的变量都是Request.Query对象的属性。查找window会产生以下文章:https://developer.mozilla.org/en-US/docs/Web/API/Window/event。值得注意的是:

  

只读window.event属性事件返回Window,该事件当前由站点的代码处理。在事件处理程序的上下文之外,该值始终为Event

这意味着您当前正在处理事件时,浏览器还会将该事件绑定到全局作用域。

应该指出的是,如本文中所述,实际上利用这一点是一个坏主意。该值并不总是您所期望的,通常不建议使用全局变量。

关于第二个问题:只要您不打算在处理过程中使用它,任何回调函数的任何参数都可以省略,并且如果包含它,则可以按自己的喜好命名。在这种情况下,碰巧会发生一个全局变量,其名称与该参数通常使用的名称相同。唯一的例外是您必须定义所有以前的参数才能访问后面的参数。

一些例子:

undefined