[JavaScript] 猿でもわかるクロージャ超入門 3 無名関数
関数を定義する方法その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( )で関数を実行する
実はこのステップは省けるんです。
<script>
( function(){ alert("hello"); } )(); // "hello"と出力
</script>
これで、一時変数speakを省くことができました。このように、無名関数を定義してすぐさま実行したいときは
( function( ){..} )( );
という構文になります。
( function......... )( );
の左の括弧が何故必要なのか理解に苦しむところですが、これがないとエラーになります。
まあこういうものだと思ってください。(JSの次期バージョンでは不要になるらしいです)
このような無名関数の構文は、クロージャを実現するときによく使われます。
これでクロージャを60%ぐらい理解したことになります。
クロージャマスターまでだいぶ近づきました。(w
次の記事 猿でもわかるクロージャ超入門 4 関数を返す関数
注1:本当は2通り以上ある。
注2:厳密にはちょっとだけ違います。
カテゴリ:
JavaScript
closure