Javascript 检查事件处理程序参数

Javascript 检查事件处理程序参数,javascript,javascript-events,Javascript,Javascript Events,我在学习Javascript时得到了以下代码: myLink.onmouseover = showLinkAttr; function showLinkContent(evt) { if (evt) { var url = evt.target; } else { evt = window.event; var url = evt.srcElement; } .............. 我不知道为什么我们需要在创

我在学习Javascript时得到了以下代码:

myLink.onmouseover = showLinkAttr;
function showLinkContent(evt) {
    if (evt) {
        var url = evt.target;
    }
    else {
        evt = window.event;
        var url = evt.srcElement;
    }
..............
我不知道为什么我们需要在创建事件处理程序参数“evt”之前检查它。我的想法是,这段代码是多余的,因为“evt”不存在(这段代码在脚本文件的开头),表明我们应该在不检查它的情况下创建它,如下所示:

  myLink.onmouseover = showLinkAttr;
  function showLinkContent(evt) {
        evt = window.event;
        var url = evt.srcElement;
然而,由于我是JavaScript新手,下面的代码是由专家编写的。那么,你能告诉我为什么她用它而不是我在下面写的那个吗?
谢谢。

该代码针对不同浏览器之间的不一致性。查看本文了解详细信息:

您已经完成了一半<代码>evt只有在客户端运行称为IE的浏览器时才是未定义的

IE不将事件对象传递给处理程序,但只有一个全局事件对象。这就是事件处理程序检查事件对象是否已作为参数传递的原因,如果未作为参数传递,则获取全局事件对象。但这可以写得更短:

evt = evt || window.event;//evt is equal to itself, if it's not undefined, else it's a reference to the global object
目标也是如此(您称之为
var-url
,这很混乱,可能是错误的):

target
(或
srcelelement
)返回对DOM元素(触发事件的元素)的引用,而不是url,就像您的varname让您相信的那样。

双管道
|
称为默认操作符

要接受其他一些问题的答案,您需要单击答案评分下方的勾选框。
var target = evt.target || evt.srcElement;