ページ

2010年12月12日日曜日

JavaScriptの勉強:Ajax時代のJavaScriptプログラミング再入門


古い(2007/06~2007/09)のが難点。ツールガイド系はちょっと古くなっただけで無意味になるものが多いので。


読みどころはAptana Studioの紹介あたりでしょうか。ですが、検索かけてみると、Aptanaについての新しめの情報は見つかりません(2008頃までですね)。廃れてしまっているのでしょうか。


Functionコンストラクタによる定義は面白いですね。これは知りませんでした。後半に書かれていますが、関数コンストラクタによる定義と無名関数定義の違い、使い分け、あたりは興味のあるところです。後で出てくるようなのでその時に。高階関数では無名関数の出番で関数コンストラクタは使えない、と無名関数は普通に使うので関数コンストラクタが便利になるポイントで出てこないと有難味がありません。そのあたりはスコープに絡んだ話になるようです。


ローカルスコープ実現のためにこのような方法が紹介されていますが、こういうのはJS使いにとっては常識なのでしょうかね。

(function() {
  for (var i  =0; i < 10; i++) {
    // ブロック内の処理
  }
})();

以前に読んだJavaScript再入門でクロージャのメモリリーク防止のための手法として同じように無名関数内で処理してしまう手法が出ていました。ある意味都合のいい(外部に一切影響を残さない)コードですが、あまり多用されるとコードが見難くなりそうです。

無名関数と同様に匿名オブジェクト(with (匿名オブジェクト){})でも疑似ブロック・スコープが構築できるのですね。確かにスコープを作るのであればこちらの方が見た目が良いです。

で、出てきました「関数リテラルとFunctionコンストラクタにおけるスコープの違い」。関数リテラル(無名関数)を定義する時はローカルな環境を取り込むのに対して、Functionコンストラクタはグローバルオブジェクト決め打ちになっているのですね。

クロージャの仕組みを理解する 単純に、内部状態を持った関数(オブジェクトではなく)を作るにはこうすればいいのですね。JavaScript再紹介のリンク先では内部変数、内部関数でクロージャを作って private 変数を実現していましたが、単一関数での内部変数を用意するならこちらの方が簡単です。


このあたりは、以前にJavaScript再入門を読んだ時にしっかりと解説されていた部分です。最初からこちらの解説を読んでも良かったかもしれません。解説対象がほぼ同じ、レベルもほぼおなじでしょう。

0 件のコメント:

コメントを投稿