<td id='xyz' onmouseover='doIt(this)'...
例如,和 之间有什么区别<td id='xyz' onmouseover='doIt()'...
。是this
DOM元素吗?
4 回答
浏览器调用构造的处理函数,以便this
引用事件所针对的 DOM 元素。因此,this
它只是对出现此类属性的 DOM 元素的引用。
在示例中,this
指的是处理程序绑定到的 DOM 元素。我建议阅读quirksmode.org 上的优秀文章,其中解释了这一点以及更多关于事件处理的内容。
<td id='xyz' onmouseover='doIt(this)'...
和有什么区别<td id='xyz' onmouseover='doIt()'...
在第一种情况下,您将参数传递给函数,这是一个 DOM 元素,在第二种情况下,您没有。
将this
引用 DOM 元素,在您的示例中为td
DOM 元素。
查看有关事件处理程序的 MDN 页面以获取更多信息,特别是有关内联事件处理程序的部分。
你问“有什么区别”。不同之处在于,在第一种情况下,调用是从执行上下文进行的,其中是对元素的引用,并且该引用作为第一个参数this
传递给。doIt
在第二种情况下,不传递任何参数。
现在为什么。
当一个事件到达一个元素时,相关的处理程序将查看是否有任何代码要运行。如果存在,它将创建一个新的执行上下文,就像在函数代码中一样,其作用域链上的全局对象和this
绑定设置为元素。然后它将执行代码。所以在处理程序的执行上下文中,当代码:
doIt(this)
被执行,this
引用元素。请注意,由于this
未在对 的调用中设置doIt()
,因此this
它将在非严格模式下默认为全局对象,或者在严格模式下保持未定义。