辞書: 無名関数

投稿日:

無名関数とは

その名の通り、名前がない関数です。

例えば、JavaScriptでは、function()を使って書くことができます。

setTimeout(function() { console.log("Hello World"); }, 1000);

変数の定義と名前付けを分離

例えば、先程の無名関数は、以下のように書くこともできます。

function hello() {
  console.log("Hello World");
}

setTimeout(hello, 1000);

実は、この関数helloの定義には、以下の2つが混じっています。

  1. 処理の定義(console.logに"Hello World"と書く)
  2. 名前付け(hello)

この2つを分離できると、何かと便利なことがあります。 それを実現するには、以下の2つが必要です。

  1. 処理の定義は「関数オブジェクト」を返す
  2. 「関数オブジェクト」をデータと同じように扱えるようにする。
    • 「代入」という操作によって、名前付けが可能です。

この性質を「第一級オブジェクト」 あるいは「ファーストクラスオブジェクト」と呼びます。 この考え方に沿って書くと、以下のようになります。

var hello = function() {
  console.log("Hello World");
}

setTimeout(hello, 1000);

ラムダ式

「ラムダ式」という言葉も出てきますが、本質的には無名関数との違いはなく、 単に無名関数の記法を指すんじゃないかなぁと思います1


  1. Wikipedia(en)のAnonymous functionには区別して書かれてないようなので。 [return]