諸先輩型に比べればまだまだJavaScriptへの理解が浅い私ですが、知っている限りの具体例をご紹介したいと思います…
具体例①:初学者のコピペWebサイト制作
あまりいい例ではないのですが…
JavaScriptやjQueryが自分でスラスラ書けない初学者さんは、コピペで動きを実装することも多いと思います。
その時問題になってくるのが変数名や関数名被りです。
しかし、即時実行関数を使ってやればスコープで区切ることで、同じ識別子を気にせず使用することができます。
ES5時代
javascript
1(function () {
2 // コピペしてきたコードをこの中に
3 var btn = document.getElementById('submit-btn');
4 btn.onclick = function() {
5 console.log('submit');
6 }
7})();
8
9(function () {
10 // 別のコピペコードをこの中に
11 var btn = document.getElementById('button'); // 変数名が被っても安心!
12 btn.onclick = function() {
13 console.log('button');
14 }
15})();
ES6時代
javascript
1{
2 // コピペしてきたコードをこの中に
3 const btn = document.getElementById('submit-btn');
4 btn.addEventListener('click', () => {
5 console.log('submit');
6 });
7}
8
9{
10 // 別のコピペコードをこの中に
11 const btn = document.getElementById('button'); // 変数名が被っても安心!
12 btn.addEventListener('click', () => {
13 console.log('button');
14 });
15}
具体例②:ES5時代のモデュールをわける手法の一つ
ES6そしてNode.jsのおかげでimport / export
が使用できるようになり、気軽にモデュールごとにコードをわけられるようになりました。
それ以前の時代では、即時実行関数によりモデュール分けをすることもあったようです。
例えば家計簿のWebアプリを作成するとします。
コードの内容をおおまかにわけると、3種類に分けれられます。
- 金額を計算したり、登録された情報の保存・変更・削除を管理する役割のコード
- UI(見た目)を操作する役割のコード
- 上記2つともを統合する全体的な役割のコード
これらに分割して即時実行関数でくくってやるとこうなります。
javascript
1// 情報制御
2var budgetController = (function() {
3 // なんやかんや処理して
4
5 // 計算とか管理の処理する関数をオブジェクトにいれて戻す
6 return {
7 addItem: function() {...},
8 removeItem: function() {...},
9 getTotal: function() {...}
10 }
11})();
12
13// UI制御
14var UIController = (function() {
15 // DOM取得してきたり、なんやかんや処理して
16
17 // UI操作する関数をオブジェクトにいれて戻す
18 return {
19 addListItem: function() {...},
20 removeListItem: function() {...},
21 displayTotal: function() {...}
22 }
23})();
24
25// 全体の制御
26var controller = (function(budgetCtrl, UICtrl) {
27 budgetCtrl.addItem(); // budgetControllerの即時実行関数で定義し、戻した関数を使える。
28 UICtrl.displayTotal() // UIControllerの即時実行関数で定義し、戻した関数を使える。
29})(budgetController, UIController); // 上記2つの即時実行関数から戻された値を引数に渡す
私が知ってるのはこれだけです…。