JavaScriptっぽい。

『JavaScriptっぽい。』の更新情報やJavaScriptに関する日記。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告|
  3. トラックバック(-)|
  4. コメント(-)

関数リテラルをそのまま実行

最近見かけるようになった書き方。


(function(){
 alert("hoge");
})();

イベントハンドラなども極力HTMLから切り離した上で、ステートメントをすべて関数リテラルの中に書いて、全体を()で囲み、最後に()をつけて、そのまま実行する。

最初に見かけたのはKURT'S DHTMLというスクリプト配布サイトだと思う。

正直最初は何でこんな書き方をするのだろうと謎であった。 わざと分かりにくい書き方をしているのだろうか?

しかし、最近いろいろなサイトにおける質問掲示板の常連回答者であるPid氏もこのような書き方をするようになっていて、ひょっとして合理的な書き方なんだろうか?と思うようになってきたのだが、やっと意味が分かりました。

思わず「そうだったのか~・・・!」と叫んで、そこらじゅうを走り回りそうになりましたが、どうやらグローバルな識別子をすべて排除するためにやっているようです。

要するに、Webサイト作成初心者の人たちは、いろいろなところから複数のスクリプトをべたべたと1つのHTMLに貼りたがります。 そこで問題になるのが、グローバルな識別子の衝突です。 それを防ぐための最もいい方法は、当然グローバルな識別子を1つも使わないことになります。 そこで、すべてを関数リテラルの中に入れて、変数はすべてvar宣言してローカルに閉じ込め、その関数リテラルの最後に()をつけて実行してしまえば、その関数にも識別子をつけなくて済むので、無用な識別子の衝突を防ぐことができます。

しかも、ローカル変数のみにした方が、スコープも当然狭くなってスピードやメモリ効率もよくなることが期待できます。(現状そこまで配慮する機会はあまりないとは思いますが…)

ひょっとしたら、今後はこういう書き方が主流になったりするんでしょうかね?

スポンサーサイト
  1. 2005/09/24(土) 18:54:28|
  2. 雑記|
  3. トラックバック:0|
  4. コメント:0
<<トランプ3枚当て用スクリプト | ホーム | 配列をシャッフルする>>

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://javascript.blog3.fc2.com/tb.php/13-14261272

PUREST

10 | 2017/11 | 12
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -

Recent Entries

Recent Comments

Recent Trackbacks

Archives

Category

Links

Search

Recommend

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。