Добавяне на обработчици в цикъл в JavaScript

Нека сега научим как масово да добавяме обработчици на събития към елементи. Нека, например, имаме параграфи:

html<p>text1</p>
<p>text2</p>
<p>text3</p>

Нека имаме и функция:

javascriptfunction func() {
  console.log('!');
}

Нека обходим нашите параграфи в цикъл и на всеки параграф да добавим като обработчик за кликване функцията func:

javascriptlet elems = document.querySelectorAll('p');

for (let elem of elems) {
  elem.addEventListener('click', func);
}

Нека продължим напред и направим така, че при кликване върху който и да е параграф да се извежда текстът на този параграф. Има, обаче, проблем: параграфите са много, а функцията-обработчик е една. Как да различаваме нашите параграфи вътре във функцията-обработчик?

В това ще ни помогне обектът this - при извикване на функцията в момента на събитието този обект ще сочи към този елемент, където това събитие се е случило. Нека преработим кода на нашата функция func в съответствие с казаното:

javascriptfunction func() {
  console.log(this.textContent); // извеждаме текста на параграфа
}
Задание 1

Дадена е следната функция:

javascriptfunction func() {
  this.value = Number(this.value) + 1;
}

Дадени са и input полета. Направете така, че при загуба на фокус във всяко от нашите input полета да се изпълнява показаната по-горе функция.

Задание 2

Дадени са параграфи с числа. Направете така, че при кликване върху който и да е параграф числото в него да се повдига на квадрат.