Подаване на параметри в модул чрез затваряния в JavaScript

Добра практика е да не се вграждат стойности директно в модула, а да се подават като параметри на самия модул (тоест като параметри на незабавно извикваната функция):

javascript;(function(arg1, arg2) { // параметрите попадат в променливи
  
})(1, 2); // подаваме някакви параметри

Нека разгледаме пример. Да предположим, че имаме div с число и бутон:

html<div id="div">3</div>
<button id="btn">click me</button>

Да предположим също, че имаме някакъв модул:

javascript;(function() {
  let div = document.querySelector('#div');
  let btn = document.querySelector('#btn');
  
  function func(num) {
    return num * num;
  }
  
  btn.addEventListener('click', function() {
    div.textContent = func(div.textContent);
  });
})();

Както виждате, селекторите на нашите елементи са твърдо вградени в кода на модула. По-добро решение би било да ги подадем като параметри на модула - така в бъдеще лесно ще можем да ги променим. Нека коригираме нашия модул:

javascript;(function(selector1, selector2) {
  let div = document.querySelector(selector1);
  let btn = document.querySelector(selector2);
  
  function func(num) {
    return num * num;
  }
  
  btn.addEventListener('click', function() {
    div.textContent = func(div.textContent);
  });
})('#div', '#btn');
Задание 1

Даден е бутон и три входни полета, в които се въвеждат числа. При натискане на бутона изведете в конзолата сумата от въведените числа. Реализирайте задачата с помощта на модул.