【发布时间】:2014-04-11 01:23:03
【问题描述】:
假设函数doSomething()定义在同一个地方,这三种监听事件的方法在执行时函数的作用域有区别吗?
<body onload="doSomething();">
document.body.onload = doSomething;
document.body.addEventListener('load', doSomething);
与addEventListener()相比,除了属性只能包含一个“侦听器”之外,这三种方式侦听事件之间还有其他区别吗? (比如传入的参数,或者this的值?)
【问题讨论】:
-
好吧,在属性代码中,您显然既没有将
this值也没有将事件传递给doSomething()... -
虽然与您的问题无关,但第三个不会做任何事情。您需要绑定到
'load'事件,而不是'onload' -
@enhzflep 糟糕,这是一个错字。谢谢,已修复。
-
@enhzflep 不过,如果 JavaScript 像 AS3 那样严格输入,就不会出现难以调试的错字。我的“修复”:twitter.com/IQAndreas/status/453754209582583808
-
@IQAndreas - 我个人认为这不是改进。您仍然必须记住,在使用 addEventListener 时,'on' 前缀不适用。虽然您确实受益于在一个块中拥有一堆处理程序名称,这可能有助于识别一个错误的处理程序,但对于因此运行的东西来说,这是一个非常多的输入(阅读:代码膨胀)稍微慢一点。就是说-这是一种不适合我的方法,因为我可以记住它们(或很快地查找名称)。其他人的里程显然会有所不同。
标签: javascript html javascript-events