Подаване на callback за работа с DOM на JavaScript

Да предположим, че имаме определена група от DOM елементи:

html<p class="elem">1</p>
<p class="elem">2</p>
<p class="elem">3</p>
<p class="elem">4</p>
<p class="elem">5</p>

Нека направим функция forEach, която първият параметър ще приеме селектор на група от елементи, а вторият параметър - функция-callback, която ще се приложи последователно към всеки от намерените елементи:

javascriptforEach('.elem', function() {
  // функцията ще се приложи към всеки елемент
});

Нека елементите, попаднали под селектора, последователно да влизат в първия параметър на callback функцията:

javascriptforEach('.elem', function(elem) {
  console.log(elem); // ще изведе последователно намерените елементи
});

Нека с помощта на нашата функция намерим всички елементи с клас elem и за всеки намерен елемент приложим callback, който ще повдигне на квадрат текста на всеки елемент:

javascriptforEach('.elem', function(elem) {
  elem.textContent = elem.textContent ** 2;
});

Сега нека напишем реализацията на предназначената от нас функция forEach:

javascriptfunction forEach(selector, func) {
  let elems = document.querySelectorAll(selector);
  
  for (let elem of elems) {
    func(elem);
  }
}
Задание 1

Дадени са параграфи. С помощта на създадената от нас функция forEach за всеки параграф добавете в края на неговия текст удивителен знак.