質問: ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/bd0c784c3fd4e7515698df595816b941.jpeg) 第二引数に関数をとりなおかつそれが無名関数なら 33行目は})();で()がいるのではないでしょうか? 無名関数は全体を()で囲いさらに()をつけ関数名を省略と習いましたが ``` //即時関数 (function(name) { console.log("hello " + name); })("Tom"); */ ``` リンク内容 リンク内容
回答: 関数と関数実行の理解が曖昧な感じですね。 `addEventlistener`の使い方ですが、第二引数に関数を渡しているだけです。文字列を引数に渡すのと同じです。 それでイベントのタイミングになると、自動的に渡した関数を実行してくれます。 ``` // 無名関数の定義 function() { // 処理 }; // 名前付き関数hogeの定義 function hoge() { // 処理 }; // hogeの実行 hoge(); // 即時実行(定義+実行) (function() { // 処理 })(); ``` 無名関数の部分を名前付き関数helloにすると、下記のようになります。 `addEventListener()`実行の際に、第一引数に文字列、第二引数に関数を渡しているだけなのが分かりやすいかと思います。 ``` var hello = function(){ var greet = document.createElement('p'), text = document.createTextNode('Hello world'); document.body.appendChild(greet).appendChild(text); }; document.getElementById('add').addEventListener('click', hello); ```