[JavaScript] 猿でもわかるクロージャ超入門 3 無名関数

Javascriptでは、関数を定義するのに2通りのやり方があります。(注1)

関数を定義する方法その1 (普通のやり方)
<script>
function speak(){ alert("hello"); }

speak(); // "hello"と出力
</script>
はい、普通ですね。

次はJS特有のやり方です。
関数を定義する方法その2 (無名関数を使う)
<script>
var speak = function (){ alert("hello"); }

speak(); // "hello"と出力
</script>
2行目に注目。
この式の右辺、function( ){...}の部分を無名関数といいます。

右辺で無名関数を生成して、それを変数speakに代入しています。
こうすると、変数speakはまるで関数のような振る舞いをします。(というか関数になります)
speak( )と括弧をつけてやることで、関数呼び出しを実現できます。

方法1と方法2は、ほぼ同じことをしていると考えて結構です。(注2)

無名関数を定義してすぐさま実行する

上記の方法2では、3つのステップを踏んでいます。
  • 無名関数を定義する
  • それを変数speakに代入する
  • speak( )で関数を実行する
わざわざ一時変数speakに代入しているところが無駄だと思いませんか?
実はこのステップは省けるんです。
<script>
(  function(){ alert("hello"); }  )(); // "hello"と出力
</script>
これで、一時変数speakを省くことができました。

このように、無名関数を定義してすぐさま実行したいときは
( function( ){..} )( );
という構文になります。
( function......... )( );
の左の括弧が何故必要なのか理解に苦しむところですが、これがないとエラーになります。
まあこういうものだと思ってください。(JSの次期バージョンでは不要になるらしいです)

このような無名関数の構文は、クロージャを実現するときによく使われます。
これでクロージャを60%ぐらい理解したことになります。
クロージャマスターまでだいぶ近づきました。(w


次の記事  猿でもわかるクロージャ超入門 4 関数を返す関数


注1:本当は2通り以上ある。
注2:厳密にはちょっとだけ違います。
カテゴリ: