JavaScript ではよくある、こういう書き方。 一応説明すると、これは実行時に外側の無名関数を実行します。外側の無名関数は返り値として、内側の無名関数を返し、変数 counter には内側の無名関数が代入されます。 これの何が嬉しいのか。 counter 関数が内部に持っている変数 i は隠蔽されており、外から変更できない。 グローバル空間の汚染は counter 1 つだけ。 といったところでしょうか。とにかく、 JavaScript 脳の人はこういう感じのコードをよく書いている気がします。 JavaScript にはオブジェクト指向によくある protected や private といったアクセスレベルを制御する機能が無いため、これの応用で内部の変数やメソッドを隠蔽することが多いです。 Prototype や jQuery でもそういった使い方がされています。 このように、 J
![Perl でも JavaScript っぽくクロージャが作れるんですね - Born Too Late](https://cdn-ak-scissors.b.st-hatena.com/image/square/024c53178450b73e6589205cbb2f4e14a91797ff/height=288;version=1;width=512/http%3A%2F%2Fblog.yuyat.jp%2Fwp-content%2Fuploads%2FB000ELJAI8.01._SCLZZZZZZZ_V56939722_.jpg)