Passando um callback para trabalhar com DOM em JavaScript

Suponha que temos um grupo de elementos 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>

Vamos criar uma função forEach que aceitará como primeiro parâmetro um seletor de um grupo de elementos e como segundo parâmetro - uma função de callback, que será aplicada sequencialmente a cada um dos elementos encontrados:

javascriptforEach('.elem', function() {
  // a função será aplicada a cada elemento
});

Suponha que os elementos que correspondem ao seletor sejam passados ​​sequencialmente para o primeiro parâmetro do callback:

javascriptforEach('.elem', function(elem) {
  console.log(elem); // exibirá os elementos encontrados um por um
});

Vamos usar nossa função para encontrar todos os elementos com a classe elem e para cada elemento encontrado, aplicar um callback que elevará ao quadrado o texto de cada elemento:

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

Agora vamos escrever a implementação da nossa função forEach:

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

Existem parágrafos. Usando a função que criamos, forEach, adicione um ponto de exclamação ao final do texto de cada parágrafo.