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);})();
文末にセミコロンはちゃんと付けましょう。ってことですね。