合成事件。
根据DOC:
SyntheticEvent 被合并。这意味着 SyntheticEvent 对象将被重用,并且在调用事件回调后所有属性都将被取消。这是出于性能原因。
例子:
function onClick(event) {
console.log(event.type); // => "click"
const eventType = event.type; // => "click"
setTimeout(function() {
console.log(event.type); // => null
console.log(eventType); // => "click"
}, 0);
}
如何访问回调中的值?
将值存储在变量中:
如果要访问超时回调函数中的值,则将该值存储在变量中并使用该变量而不是直接使用事件对象。
function onClick(event) {
console.log(event.type); // => "click"
const { type } = event;
setTimeout(function() {
console.log(type); // => click
}, 0);
}
使用 event.persist():
如果您想以异步方式访问事件属性,您应该对事件调用event.persist(),这将从池中删除合成事件并允许用户代码保留对事件的引用。
function onClick(event) {
event.persist();
console.log(event.type); // => "click"
setTimeout(function() {
console.log(event.type); // => click
}, 0);
}