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

白石俊平(あゆた)
2008-01-10 18:00:00
今回はJavaScriptの「関数はオブジェクトである」という概念について考えてみます。
最新特集【一覧】
  • 関数内で関数を定義することができる … (1)
  • 関数オブジェクトを戻り値にとることもできる
  • 関数内で定義された関数からは、ローカル変数を参照し続ける事ができる … (2)

 最後のポイントは非常に重要なので、覚えておいてください。このように、関数自身が定義された環境を、ローカル変数も含めて持ち運ぶことのできる仕組み (またはそうした関数自体) のことをクロージャと呼びます。

まとめ

 今回は「関数はオブジェクトだ」という話を中心に、以下のようなことを学びました。

  • 「関数宣言」の本質は「関数オブジェクトを変数に代入する」と言うこと
  • 無名関数
  • 関数オブジェクトを、関数の引数として利用する
  • 関数オブジェクトを、関数の戻り値として利用する
  • クロージャとは何か

 今回はなかなか盛りだくさんでしたね……

 しかし、関数についてはまだまだ説明しなければならないことが多くあります。それほど、JavaScriptの関数は奥が深いのです。JavaScriptの関数が持つ更なる機能については、今後の連載でお話しすることになると思います。楽しみにお待ちください。

 次回は、JavaScriptにおける「オブジェクト」について、詳しく突っ込んだ話をしてみたいと思います。

  • コメント(3件)
#1 D298   2008-01-19 12:25:08
関数がオブジェクト、という概念はC言語の関数ポインタになぞらえると理解しやすい?かも。
クロージャは関数が使うヒープ領域が関数ポインタに紐付いて管理されている、と考えるといいのでしょうか?関数オブジェクト用のメモリを開放しないでallocしっぱなしと考える・・・となんとなく把握しやすいような?
#2 moscript   2011-03-06 09:07:22
 最初のHTMLの例文のタグがエスケープされていないのでコードが実行され、ページのHTMLを読まないとコードを読むことができません。修正を希望します。
#3 moscript   2011-03-06 09:13:30
 読み進めているうちにさらに気付きました。
 例文として挙げているJavaScriptをそのまま実行コードとして実行させているようですが、これはあきらかに望ましくありません。Webコンテンツで実行させるJavaScriptは実行用コードとして書き、例文はエスケープしてちゃんと例文として扱うべきです。
 例文がコードがまったくエスケープされていないので、一般的なブラウザでは例文を読むことができません。くどいですが修正を希望します。