javascript函数中的“事件”对象在不传递的情况下被识别?

javascript函数中的“事件”对象在不传递的情况下被识别?,javascript,events,target,Javascript,Events,Target,按下一个链接,我调用了一个javascript函数 <a id="eventFiringLink" href="javascript:functionName()"> 通过jquery绑定单击事件 $("#someButton").bind('click',functionName); 功能描述如下所示 functionName(e) { if(event.target.id== "eventFiringLink") { con

按下一个链接,我调用了一个javascript函数

  <a id="eventFiringLink" href="javascript:functionName()">
通过jquery绑定单击事件

$("#someButton").bind('click',functionName);
功能描述如下所示

 functionName(e)
 {
      if(event.target.id== "eventFiringLink")
      {
          console.log("do this");
      }
      else
      {
          console.log("do that");
      }
 }
当我点击链接时,我想我会

TypeError:无法读取未定义的属性“target”

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

这样做

在控制台中


这怎么可能呢?

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


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

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


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

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

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

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

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

代码与您描述的一样。此外,您没有侦听事件,因此无法传递任何事件对象。事件对象也不会从内联附件自动传递。抱歉,实际上我忘了提到代码中的另一个地方,我正在将functionName绑定为按钮单击事件的侦听器。感谢您花时间研究它。,我现在已经编辑了问题描述。为什么你认为代码会出现TypeError?@Davintroon如果事件未定义,你会得到像你描述的那样的代码。此外,您没有侦听事件,因此无法传递任何事件对象。事件对象也不会从内联附件自动传递。抱歉,实际上我忘了提到代码中的另一个地方,我正在将functionName绑定为按钮单击事件的侦听器。感谢您花时间研究它。,我现在已经编辑了问题描述。为什么你认为代码会出现TypeError?@Davintroon如果事件是未定义的,你会得到这样的结果Hanks man.,说实话,这阻止了混乱的发生。谢谢老兄,这阻止了混乱的发生,说实话。