即時関数

Posted by muchag | JavaScript |
初回投稿:2015-03-28 (土) 9:35:19 | 最終更新:2015-03-28 (土) 9:38:50

なんか変な記述を見つけて、びっくりして調べた。
即時関数 というそうだ。

【環境】
Firefox:36.0.4
書式
  1. // 基本形
  2. (function(){
  3.     処理
  4. })()
  5.  
  6. // 関数名はあってもなくてもよい
  7. (function hoge(){
  8.     処理
  9. })()
  10.  
  11. // 引数値の指定は、尻尾の()で行う
  12. (function( arg ){
  13.     処理
  14. })( '引数' )
  15.  
  16. // 引数指定用の()の位置は下記でもよい
  17. (function(){
  18.     処理
  19. }())
比較
  1. // 一般
  2. function hoge() {
  3.   alert( 'test' );
  4. }
  5. hoge(); // test
  6.  
  7. // 即時関数
  8. (function hoge() {
  9.   alert( 'test' );
  10. })();
意義

「グローバル変数の使用を抑える」ことができる。

JavaScript の場合、変数も関数もグローバル変数となる。

  1. var hoge;
  2.  
  3. function hoge() {}

これらは共にグローバルオブジェクトのプロパティとして定義される。

ブラウザの場合は、Window オブジェクトがグローバルオブジェクトなので

  1. window.hoge

でアクセス可能。

即時関数の場合は、その場使い捨てなので、
グローバルオブジェクトに登録されない。
=「グローバル変数の使用を抑える」

付加効能

関数定義と呼び出しを一括で行える
=スクリプトを1行削ることができる 🙄

注意事項
記述場所

読み込み時にその場で実行してしまうので
処理対象に DOM 要素を設定している場合は
DOM 出力後に記述しないと、エラーとなってしまう。

つまり、<head> で直接記述したり、外部ファイルを読み込んではダメ。
</body> 直前に記述したり、外部ファイルを読み込んでやること。

参考サイト

三等兵:知ってて当然?初級者のためのJavaScriptで使う即時関数(function(){…})()の全て

Posted by muchag | JavaScript |
初回投稿:2015-03-28 (土) 9:35:19 | 最終更新:2015-03-28 (土) 9:38:50

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment