システム開発ブログ/ ソフトウエア開発部 Yahoo!ブックマークに登録 Google ブックマーク はてなブックマーク Livedoorクリップ シェア

システム開発ブログ

Twitterでilovex_officialをフォローしてください

最近の記事

カテゴリー

部署

月別アーカイブ

以前の部署別ブログ

クロージャを使用してコードを守る

古郡
古郡 (2010年1月12日 19:52)
ソフトウエア開発部

現在のWebアプリケーションにおいてクライアントサイドプログラム、
主にJavaScriptは非常に重要視されています。
その動きは今後も続き、外部のライブラリを使用するような機会が
今後は増えることが予想できます。

このような状況下において、開発者は外部のライブラリの影響を受けない、
または与えないようにコードを書く必要があります。

以下のように、fooという名前の関数が2つ定義されている状況を考えて下さい。

function foo(){ alert('呼びたい関数'); }
function foo(){ alert('呼ばれる関数'); }

このときに

<input id="hoge" type="button" value="Click Here" onclick="foo()">

このようなボタンを用意して、ボタンをクリックすると、
2行目に書いてあるfoo関数が呼び出されます。
これは1行目に書かれているfoo関数が、2行目に書かれているfoo関数を
上書きしてしまっていることを意味します。

このような事態を避けるためには、
先ほどのボタンのonclickイベントハンドラの設定を
以下のようにJavaScriptで行うべきです。

document.getElementById('hoge').onclick = function(){ alert('呼びたい関数'); };

しかし同じ関数を、たくさんの要素のイベントハンドラにする場合、
上記のような書き方では同じ内容の関数を複数書くことになり、保守性が下がります。
そこで、名前付きの関数を使用できるように、
クロージャを使用する以下のようなコードを書きます。

(function(){
  var foo = function(){ alert('呼ばれる'); };
  document.getElementById('hoge').onclick = foo;
})();

このコードを簡単に解説すると、
外側のfunction(){} が匿名関数の定義となります。
この匿名関数の定義を『()』で囲み、さらにその後ろに『()』を付けます。
これにより定義した匿名関数が、その場で呼び出されるようになります。
匿名関数の中身ですが、fooという関数を定義してそこで定義したfooを
イベントハンドラとして設定しています。

これでこの匿名関数の外部にfooという関数が存在したとしても、
イベント発生時には匿名関数内部で定義したfoo関数が呼ばれます。
逆にこの関数の前に、foo関数が定義されていても、
事前に定義されているfoo関数を、上書きするようなことはありません。

クロージャは理解するのも難しいですし、使いどころの選択も難しいですが、
既にいろいろな場所で使用されていますし、使えると便利です。
知らなかった方は、勉強して使えるようになってみてはいかがでしょうか。

「システム開発ブログ」へのコメントやご意見等ありましたら、 ファンページまでお願いします。  Facebook のファンページ

お問い合せ・情報はこちらの電話番号におかけください:03-3232-2525 お問合せ・資料請求はこちらをクリックしてください
ページのトップ
システム開発・一括受託開発。見積依頼受付中

システム開発専用サイト

システム開発の流れ・手順、実績など。アイロベックスのシステム開発を紹介。

VB .NETを主言語としたWebアプリケーションの開発

要件分析から保守まで、お客様の現場での問題解決だけでなく、IT経営の援護者としてトータルソリューションサービスを提供しています。

MovableType を使ったウェブサイト構築

魅力あるウェブサイトデザイン、構成はもとよりMovableTypeを使用したウェブサイトの作成、JAVA、CGIによる注文フォームの作成等、ビジネスを強力にサポートします。

フォルダーアクセス権限確認ツール『AD-Folder』

Windowsフォルダーアクセス権限確認ツール

フォルダーアクセス権限を一目で確認。使用版を無償でご利用いただけます。

スクール運営を応援する講座情報管理システム『CMS+AD for School』

Webとリアルをつなぐコンテンツマネージメントシステム

Webサイト・モバイルサイト・チラシ(PDF)・カタログ(InDesign)を、簡単かつ正確に作成できます。

「システム開発ブログ」の更新情報をTwitterで。

Twitter公式アカウントに認定されています

「システム開発ブログ」の更新情報をTwitterで。ぜひ、フォローをお願いします。