javascript - event 是一个全局变量,可以在回调链中的任何地方访问吗?

标签 javascript inheritance scope event-handling dom-events

我只是用 DOM 和 Javascript 来玩弄事件监听器,并注意到了这一点:

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

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

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

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

"the body was clicked, (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);

即使我声明要在 onClick 上传递事件 obj功能为namedEventObj它仅适用于 onClick但不是chained功能...我得到了这个,这对我来说很有意义...但绝对不是 event变量可用于chained功能。

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

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

我使用的是 Chrome 11.0.x

最佳答案

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

关于javascript - event 是一个全局变量,可以在回调链中的任何地方访问吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6426497/

相关文章:

javascript - 如何在 ReactJS 项目中导入 gl-matrix?

javascript - 为什么下面的代码是异步执行的

arrays - Julia:在 for 循环中累积数组(循环局部范围的问题)

Perl 变量范围问题

javascript - 如何在raphael js中将一个元素放入另一个元素中?

javascript - 在定义 foo 之前放置 'module.exports = foo' 是如何工作的?

cocoa - (Cocoa) 我可以同时进行子类化和委托(delegate)吗?

javascript - jQuery 和插件命名空间和继承

c++如何实现这种类结构?

javaScript 提升无法正常工作