JavaScriptのイロハ:「関数はオブジェクト」って理解できますか?

白石俊平
2008/01/10 18:00

今回はJavaScriptの「関数はオブジェクトである」という概念について考えてみます。

 JavaScriptをより深く知りたい人のための当連載、今回が実質的な二回目です。

 前々回のイントロダクション では、「当連載がどういった読者を対象にしているか」「連載の大まかなあらすじ」をお伝えしました。

 また前回 は、JavaScriptの現状を知っていただくためにその歴史や業界地図の説明を行いました。

 今回からいよいよ、JavaScriptという言語自体にスポットを当てて行きたいと思います。「高度なJavaScriptエンジニアたちは何を理解し、どんなコードを書いているのか」をご理解いただけるよう頑張っていきたいと思います。

今回のお題

 JavaScriptプログラマにとって、「関数を定義する」と言えば普通はこのように書きますね。

function a() {
  alert("こんちは");
}

 しかし、関数定義を次のように書く/書いたことがある、と言う人の数を聞くと、ぐっと絞り込まれてしまうのではないでしょうか。

var a = function () {
  alert("こんちは");
};

 今回の話題は、これら2つのコードが等価であり、そのことを理解することがJavaScriptを深く学ぶ上での第一歩である、というお話をしたいと思います。

関数はオブジェクトだ

 上で述べたことの本質を一言で表すなら、「関数はオブジェクトである」と言うことになります。

 JavaScriptにおける「オブジェクト」とは何なのか、については次回詳しくお話します。なので、ここで言うオブジェクトとは「データと振舞いをひとまとまりにしたもの」という程度にとどめておきます。

 オブジェクトは、Javaに代表されるオブジェクト指向言語では基本的な単位の一つで、変数に代入したり、メソッドの引数/戻り値に使用することもできます。

 そしてJavaScriptでは「関数もオブジェクト」なので、関数に対してそうした操作 (代入や引数、戻り値など) を行うことが可能です。以下でそれを試していきましょう。

  • コメント(1件)

#1 D298  - 2008/01/19 12:25:08

関数がオブジェクト、という概念はC言語の関数ポインタになぞらえると理... 続きを見る
» 不適切なコメントを報告する
記事の感想やご意見をコメントでお寄せください(CNET_IDログインが必要です)
ログイン パスワードを忘れた方  |  新規登録
  • 新着記事
  • 人気記事
  • 特集
  • ブログ