23

私はhas.jsのコードを調べていて、最初のセミコロンに戸惑いました:

;(function(g){
  // code
}()(this);

私の知る限り、それはまったく何もしません。()または!do:(function(){}())またはのように関数を式の位置に配置しません!function(){}()。空行のラインエンダーに過ぎないようです。

このセミコロンの目的は何ですか? IIFEの始まりと終わりの間の対称性に対するOCDの欲求? :)

4

1 に答える 1

41

以前のコードが関数への引数としてコードを実行するのを防ぐためにあります。

すなわち

mybrokenfunction = function(){

} //no semicolon here
(function(g){


})(this);

匿名関数を引数として mybrokenfunction を実行します。

mybrokenfunction = function(){}(function(g){})(this);

自分の関数の前に終了していない (セミコロンのない) 関数が存在しないことを保証できる場合は、最初のセミコロンを省略できますが、省略できないため、余分なセミコロンを入れた方が安全です。

于 2013-07-31T19:12:33.060 に答える