[JavaScript]即時関数の呼び出しが,なぜ「(function(){…})()」の形式になるか説明してみる。
JavaScriptでは即時関数という仕組みがあります。 即時関数は、グローバルな名前空間を汚さない無名関数を作って、その関数を直ぐにコールする方法です。 コードは、以下のような形式になります。 (function() { alert( "hello" ); })();(function() { alert( "hello" ); })(); jQueryとかのサンプルを見ると良く見る形式ですが、なぜこの形式で即時関数を定義できるのか、 改めて考えてみます。 まず、無名関…
続きを読む
[JavaScript]関数に、一度しか実行しない初期化処理を組み込む
関数に、コンストラクタのような一度しか実行されない初期化処理を組み込むことが出来ます。 下記の例では、getCounter()で関数オブジェクトを取得するたびに、初期化処理がコールされます。 // 関数の定義 var getCounter = function() { // コンストラクタ的な、初期化処理 console.log( "initialize" ); // この変数は呼び元から見えない(privateな状態になる) var counter = 0; return function…
続きを読む
[JavaScript]例外発生時に、catch句でエラーの発生場所を取得する
JavaScriptのtry-catchのcatch句で取得できる例外オブジェクトは、エラーの内容を伝えるためにnameとmessageプロパティを持っています。 JavaScriptの標準規格では、例外オブジェクトが持っているプロパティは2つのみですが、firefox等の一部のブラウザでは、これらに加えてエラーが発生したファイルや行番号の情報も取得することが可能です。 これらの情報はfirefoxの場合はfileName,lineNumberで取得できますが、標準仕様からの拡張である為、IEでは取得することが出来ません。 ブラウザの互換性まで考慮したうえで、以下のようなエラー処理を書いておく…
続きを読む