我只是想了解这段代码背后的逻辑:
window.onkeydown = function () {
handler(event);
};
function handler(event)
{
console.log(event.key); // this works!
}
是否要使用匿名函数中包含的事件参数声明事件处理程序?像这样:
window.onkeydown = function (event) {
handler(event);
};
我知道浏览器会自动将事件传递给处理程序,但我仍然感到奇怪的是,分配不带参数的匿名函数仍然有效。这是正常行为吗?
为什么事件参数在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) {
// ...
});