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');
ボタン1つと、数字を入力する3つのinputがあります。 ボタンをクリックすると、入力された数字の合計を コンソールに出力してください。 モジュールを使用してこのタスクを実装してください。