事件是回调链中随处可访问的全局变量吗?

我只是在玩弄 DOM 和 Javascript 的事件侦听器,并确实注意到了这一点:

I was just playing around with event listeners with DOM and Javascript and did notice this:

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

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

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

现在有趣的是......这将输出:

Now the funny thing...this will output:

身体被点击,(MouseEvent)"

"the body was clicked, (MouseEvent)"

那我问,为什么?它如何传递事件对象而不在 chained 调用中发送它?

Then I ask, why? how does it passes the event object without sending it on the chained call?

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);

即使我将要在 onClick 函数上传递的事件 obj 声明为 namedEventObj 它也只能用于 onClick 而不能用于 chained 函数...我知道了,这对我来说很有意义...但绝对不是 event 变量可用于 chained 函数.

Even If I declare the event obj to be passed on the onClick function as namedEventObj it will available only to onClick but not to chained function...I got this and this makes sense for me...but definitely not the event variable to be available to the chained function.

有人知道它为什么会这样吗?

Anyone know why does it behaves like this?

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

The only thing I can think of is that event is in fact window.event and it makes itself available when some event dispatches and Event...but that would mean that any element could get that event information if called at the same time as the event when it triggers?

我使用的是 Chrome 11.0.x

I am using Chrome 11.0.x

推荐答案

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

One can access the current event through window.event. Just using event is implicitly accessing window.event.

相关文章