読者です 読者をやめる 読者になる 読者になる

無名関数と即時関数 - JavaScript独習

独学!JavaScript

ドットインストールJavaScriptの勉強を開始しました。JavaScript入門を終え、おみくじを作ったり5秒当てゲームを作ったりしている今日この頃です。正直まだJavaScriptの全体像すらつかめてない気がするが、最初は言われたことを愚直にやるのが吉だと思うので、とにかく講座を進める日々。

で、そしたら早速つまずきました。

(function () {
“use strict”;
document.getElementById(“btn”).addEventListener(“click”, function () {
document.getElementById(“result”).innerHTML = “ああだこうだ”;
});
})();

ボタンを押したら文章が書き換わるJSらしい。それはなんとなくわかる。まずIDを取得して、それを"click"したらfunction()内の命令、つまりresultというIDに「ああだこうだ」という文章が入ると。うん、わかる。

で、問題はここから。

})();

この最後についてる括弧 () はなにっ!?

閉じタグがいるのはわかる。だから}); ならわかるのだ。問題はその後ろの「()」。これ何?って話だ。そんな説明あったっけ? この「()」がないと動かないみたいだから、やっぱり必要なやつなんですよ。なんだよこれということで、先生(=同僚)に聞いた。

全体を括っている()を私は宣言(var hoge = )が省略出来るやつだというのはなんとなく分かっていたのですが、それがどういうことかわかっていなかったみたいです。全体を括っている()は宣言を省略出来るのですが、これだけだと無名関数だよっていう定義をしただけだと。無名だからあとから呼び出すこともできない無意味な記述ということになってしまう、とのこと。

だから、この無名関数を今すぐ実行して良いんだよ、と教えてあげるのが即時関数の役割で、最後に「()」を付けることで即時関数になるということだそうです。「()」は関数を実行する魔法のトリガーなんですね。

よくネットで見るスイーツ()とかの「()」は即時関数が語源なのかな。でもスイーツを即時関数にしてすぐ実行できるってどういう意味なんだろう。