無名関数とは
その名の通り、名前がない関数です。
例
例えば、JavaScriptでは、function()
を使って書くことができます。
setTimeout(function() { console.log("Hello World"); }, 1000);
変数の定義と名前付けを分離
例えば、先程の無名関数は、以下のように書くこともできます。
function hello() {
console.log("Hello World");
}
setTimeout(hello, 1000);
実は、この関数hello
の定義には、以下の2つが混じっています。
- 処理の定義(console.logに"Hello World"と書く)
- 名前付け(
hello
)
この2つを分離できると、何かと便利なことがあります。 それを実現するには、以下の2つが必要です。
- 処理の定義は「関数オブジェクト」を返す
- 「関数オブジェクト」をデータと同じように扱えるようにする。
- 「代入」という操作によって、名前付けが可能です。
この性質を「第一級オブジェクト」 あるいは「ファーストクラスオブジェクト」と呼びます。 この考え方に沿って書くと、以下のようになります。
var hello = function() {
console.log("Hello World");
}
setTimeout(hello, 1000);
ラムダ式
「ラムダ式」という言葉も出てきますが、本質的には無名関数との違いはなく、 単に無名関数の記法を指すんじゃないかなぁと思います1。
-
Wikipedia(en)のAnonymous functionには区別して書かれてないようなので。 ↩︎