jQueryプラグインのソースを読んでいると、無名関数の先頭にセミコロン「;」を付けているのを見かけたりします。
たとえば、fancyboxとかがそうです。
;(function($){ ..etc })(jQuery);
jQueryの$関数みたいなものかな?と思いつつ、JSLintとかで文法チェックするとエラーになりますよ。
ただ、なんとなく予想はついていたので、ググってみると英語のフォーラムに書いてありました。
http://markmail.org/message/3gppon7hfmw7jqr7
ざっくり書くと、「セミコロンが先頭にあるプラグインを読み込む前に、セミコロンがちゃんと書かれていないコードがあるとバグッちゃうからつけといたよ!」ということですね。
jsでのセミコロン
jsではセミコロンの自動補完という謎の機能があるため、こんな感じの残念なソースがあります。
var hoge = "hoge"; console.log(hoge)この例だと、logメソッドの末尾にセミコロンがありません。
イミフwwwうはwwwwおkwwww
ただ、自動でセミコロンが補完されるので「動くことは動きます」。
var hoge = "hoge"; console.log(hoge) var moge = "moge"; console.log(moge);
ただし、こんな場合はエラーになります。
圧縮ツールとかにかけた場合
var hoge = "hoge";console.log(hoge)var moge = "moge";console.log(moge);改行が削除されてエラーになります。
無名関数の場合
var hoge = "hoge"; console.log(hoge) (function() { var moge = "moge"; console.log(moge); })();とかそんな感じ。
なぜ文頭にセミコロンをつけるのか
文末にセミコロンをつけないソースの後ろにコピペしたpluginのソースを貼った場合(もしくはソースをYUI Compressorとかのツールで圧縮した場合)は、無駄な改行が消されて、一行のソースになったりします。
こういう場合に、直前の文でセミコロンがなくても、問題が起きないように文頭にセミコロンを付けています。
var hoge = "hoge";console.log(hoge);;(function() {var moge = "moge";console.log(moge);})();
文末にセミコロンはちゃんと付けましょう。ってことですね。