Przekazywanie callbacka do pracy z DOM w JavaScript

Załóżmy, że mamy pewną grupę elementów 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>

Stwórzmy funkcję forEach, która pierwszym parametrem będzie przyjmować selektor grupy elementów, a drugim parametrem - funkcję callback, która zostanie zastosowana kolejno do każdego znalezionego elementu:

javascriptforEach('.elem', function() {
  // funkcja zostanie zastosowana do każdego elementu
});

Niech elementy pasujące do selektora kolejno trafią do pierwszego parametru callbacka:

javascriptforEach('.elem', function(elem) {
  console.log(elem); // wypisze kolejno znalezione elementy
});

Za pomocą naszej funkcji znajdźmy wszystkie elementy z klasą elem i dla każdego znalezionego elementu zastosujmy callback, który podniesie do kwadratu tekst każdego elementu:

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

Napiszmy teraz implementację zaplanowanej przez nas funkcji forEach:

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

Dane są akapity. Za pomocą stworzonej przez nas funkcji forEach dla każdego akapitu dodaj na końcu jego tekstu wykrzyknik.