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

zan*_*ona 26 javascript inheritance scope event-handling javascript-events

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

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

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

document.body.addEventListener('click', onClick);
Run Code Online (Sandbox Code Playgroud)

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

"点击了身体,(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);
Run Code Online (Sandbox Code Playgroud)

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

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

我唯一能想到的是事件实际上是在window.event事件调度和事件发生时使它自己可用......但这意味着任何元素如果在事件发生的同时被调用就可以获得该事件信息触发?

我使用的是Chrome 11.0.x.

Nat*_*ano 26

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

  • @redgetan你如何在firefox中使用事件? (2认同)
  • @redgetan先生,您好!是救生员。 (2认同)