事件是一个全局变量,可以在回调链中的任何地方访问?

时间:2011-06-21 13:58:03

标签: javascript inheritance javascript-events event-handling scope

我只是在玩DOM和javascript的事件监听器并注意到这一点:

function chained(msg) {
    console.log(msg, event);
}

function onClick() {
    chained('the body was clicked');
}

document.body.addEventListener('click', onClick);

现在有趣的事情......这将输出:

  

“点击了身体,(MouseEvent)”

然后我问,为什么?如何通过事件对象而不在chained调用上发送它?

function chained(msg) {
    console.log(msg, namedEventObj); //throw error namedEventObj is not defined
}

function onClick(namedEventObj) {
    console.log(event); //outputs (MouseEvent);
    console.log(nameEventObj); //outputs (MouseEvent);
    chained('the body was clicked');
}

document.body.addEventListener('click', onClick);

即使我声明事件obj要作为onClick传递给namedEventObj函数,它只能用于onClick但不能用于chained函数...我得到了这个,这对我来说很有意义......但绝对不是event函数可用的chained变量。

任何人都知道为什么会这样?

我唯一能想到的事实是事件实际上是window.event并且当某个事件调度和事件时它使自己可用...但是这意味着任何元素都可以在调用时获取该事件信息触发事件的同时?

我使用的是Chrome 11.0.x

1 个答案:

答案 0 :(得分:26)

可以通过window.event访问当前事件。仅使用event隐式访问window.event