是事件的全局变量是无处不在访问回调链里面?是事件的全局变量是无处不在访问回调链里面?(is even

2019-05-12 04:02发布

我只是用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 ,这让本身可当一些事件调度和事件......但是这将意味着,任何元素可以得到该事件的信息,如果所谓的在同一时间为事件触发时?

我使用11.0.x版的Chrome

Answer 1:

人们可以通过访问当前事件window.event 。 刚开始使用event被隐式访问window.event



文章来源: is event a global variable that is accessible everywhere inside the callback chain?