2016-01-18 2 views
0

У меня есть щелчок слушатель:Native UIEvent() не очищается после окончания событий

document.getElementById("addData").addEventListener("click", addData);

Если до фактического нажатия я сделать снимок памяти и искать UIEvent внутри объектов, это не существующее. Но после нажатия, если я возьму еще один снимок и прохожу через выделенные объекты, я могу видеть UIEvent и MouseEvent (собственные js-интерфейсы).

Вопрос в том, почему эти объекты хранятся в памяти? если я не нуждался в них до фактического события, зачем мне это нужно после окончания мероприятия?

ответ

0

Когда вы нажимаете где-то, браузер внутренне вызывает new MouseEvent("click");, так же, как вы программно создаете «виртуальный клик» на странице. Этот код будет делать то же самое, как вы нажмете на странице, но это делается в явном виде:

var evt=new MouseEvent('click'); 
document.dispatchEvent(evt); 

MouseEvent наследуется от UIEvent так как конструкторы называются:

document.addEventListener("click",function(evt){ 
console.log("evt instanceof MouseEvent :",evt instanceof MouseEvent); 
console.log("evt instanceof UIEvent :",evt instanceof UIEvent); 
}); 

Событие сборке мусора, если после этого нет ссылки на него. Вы можете получить дополнительную информацию об управлении памятью и сборке мусора в javascript на Mozilla Developer Network.

+0

Благодарим вас за ответ, но я знаю, что слушатели хранятся в памяти. Вопрос в том, почему конкретные UIEvent и MouseEvent не появляются перед фактическим событием, если они хранятся в памяти после завершения события. – jvrnt

+0

Я не говорю о слушателе, но сам объект события. evt здесь является экземпляром Mouse Event AND UIEvent, в моем коде я сохраняю событие в памяти, поскольку на нем есть ссылка на объект 'window'. – n00dl3

+0

, когда вы нажимаете где-нибудь, где вы слушаете событие «клик» (не уверен, что вам нужно слушать) браузер внутренне вызывает 'new MouseEvent (« click »);' – n00dl3

Смежные вопросы