"event" 对象在 javascript 函数中被识别而不通过它?

"event" object is recognized without passing it, in javascript function?

在按下 link 时,我正在调用 javascript 函数

  <a id="eventFiringLink" href="javascript:functionName()">

在按钮代码的另一个地方,我将 functionName() 函数绑定为点击事件的侦听器。

 <button id="someButton">

通过jquery

绑定点击事件
$("#someButton").bind('click',functionName);

功能描述如下,

 functionName(e)
 {
      if(event.target.id== "eventFiringLink")
      {
          console.log("do this");
      }
      else
      {
          console.log("do that");
      }
 }

当我点击 link 时,我以为我会得到

"TypeError: Cannot read property 'target' of undefined",

但令我惊讶的是,代码被执行并打印出来了

"do this"

在控制台中。

这怎么可能?

您正在访问全局 window.event。对该对象的支持因浏览器而异。

http://www.quirksmode.org/js/events_access.html

jQuery 传递的参数已规范化以避免这些浏览器不一致,但正如您所意识到的,您没有访问该参数,因此您获取的是原始全局事件对象。

您实际上是在访问全局对象的 属性,即 window。所以当你访问事件时,它实际上是 window.event。 但请注意,现代浏览器可能并不都支持这一点,因为这是浏览器事件处理机制的内部机制,建议将事件作为参数。事实上,在大多数跨浏览器库中,访问事件对象的常用方法如下:

if(!e){ e = window.event; }