Подаване на параметри в модул чрез затваряния в JavaScript
Добра практика е да не се вграждат стойности директно в модула, а да се подават като параметри на самия модул (тоест като параметри на незабавно извикваната функция):
;(function(arg1, arg2) { // параметрите попадат в променливи
})(1, 2); // подаваме някакви параметри
Нека разгледаме пример. Да предположим, че имаме div с число и бутон:
<div id="div">3</div>
<button id="btn">click me</button>
Да предположим също, че имаме някакъв модул:
;(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);
});
})();
Както виждате, селекторите на нашите елементи са твърдо вградени в кода на модула. По-добро решение би било да ги подадем като параметри на модула - така в бъдеще лесно ще можем да ги променим. Нека коригираме нашия модул:
;(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');
Даден е бутон и три входни полета, в които се въвеждат числа. При натискане на бутона изведете в конзолата сумата от въведените числа. Реализирайте задачата с помощта на модул.