为什么Java匿名函数中的事件参数是可选的?

问题描述 投票:1回答:1

我只是想了解这段代码背后的逻辑:

window.onkeydown = function () {
    handler(event);
};
function handler(event)
{
    console.log(event.key); // this works!
}

是否要使用匿名函数中包含的事件参数声明事件处理程序?像这样:

window.onkeydown = function (event) {
    handler(event);
};

我知道浏览器会自动将事件传递给处理程序,但我仍然感到奇怪的是,分配不带参数的匿名函数仍然有效。这是正常行为吗?

javascript browser dom-events
1个回答
1
投票

为什么事件参数在Javascript的匿名函数中是可选的?

他们不是,跨浏览器。 Microsoft在使用其event(和attachEvent)处理程序调用处理程序之前,已将global onxyz设置为当前事件。 DOM标准采用了另一种方式:将event作为参数传递。

Chrome和其他一些浏览器都可以,因此Microsoft特定的代码可以在它们上使用。但并非所有浏览器都可以。例如,除非您在用户首选项(details)中设置特殊的首选项,否则Firefox不会。

关键要点是:使用IE8和更早版本以外的所有浏览器都支持的现代事件处理(addEventListener等),并向函数声明event参数:

window.addEventListener("keydown", handler);

// ...

function handler(event) {
    // ...
}

或(函数名称是可选的,但在错误调用堆栈中有用):

window.addEventListener("keydown", function handler(event) {
    // ...
});
© www.soinside.com 2019 - 2024. All rights reserved.