Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   почему this плодится? (https://javascript.ru/forum/events/80743-pochemu-ploditsya.html)

atanov 24.07.2020 12:08

почему this плодится?
 
Вложений: 1
Доброго времени суток,
вот есть такой код:
<div class = "div1">1</div>
        <div class = "div2">2</div>
        <div class = "div3">3</div>
        <div class = "div4">4</div>
        <select class = "select1">
            <option>10</option>
            <option>20</option>
            <option>30</option>
            <option>40</option>
</select>

document.querySelectorAll('[class^="div"]').forEach((elem) => 
{
	elem.addEventListener('click', getIt);
});
function getIt()
{
	let target = this;
	document.getElementsByClassName('select1')[0].addEventListener('change', pasteC(target));
}
function pasteC(target)
{
	return () =>
	{
		console.log(target.textContent);
	}
}

Всё бы ничего, но вот никак не пойму почему плодиться this.
Если прокликать по дивам, а потом что-то выбрать в селекте, то в консоле появиться всё что кликал. Почему так происходит?

MallSerg 24.07.2020 13:05

в JS this имеет динамическую природу и фактическое его значение определяется в момент фактического вызова функции.

Белый шум 24.07.2020 18:58

atanov,
При каждом клике на div у вас добавляется слушатель события на селект.
addEventListener не заменяет обработчик события, а добавляет новый.

atanov 27.07.2020 16:02

Белый шум, да, это я уже понял. Наверное лучше было бы create элемент и удалять, вместе со всеми обработчиками. или костылём ...onchange = handler.


Часовой пояс GMT +3, время: 09:49.