質問
があります JSLint オプションは、実際には良い部分の 1 つで、「[requires] 即時呼び出しを括弧で囲む」という構造です。
(function () {
// ...
})();
代わりに次のように書く必要があります
(function () {
// ...
}());
私の質問はこれです。なぜこの 2 番目の形式がより良いと考えられるのか説明できる人はいますか?より弾力性がありますか?エラーが少なくなりますか?最初の形態と比較してどのような利点がありますか?
この質問をして以来、関数の値と関数の値を視覚的に明確に区別することの重要性を理解するようになりました。即時呼び出しの結果が代入式の右辺である場合を考えてみましょう。
var someVar = (function () {
// ...
}());
最も外側の括弧は構文的には不要ですが、左括弧は、割り当てられている値が次の値であることを事前に示します。 ない 関数自体ではなく、関数が呼び出された結果です。
これは、コンストラクター関数の大文字化に関する Crockford のアドバイスに似ています。これは、ソース コードを見る人にとって視覚的な手がかりとして機能することを目的としています。
解決
ダグラスクロックフォードのスタイルの大会案内するから:( "すぐに起動" を検索する)
関数は直ちに呼び出されるの のときに生成される値は、関数ではなく関数自体の結果であることは明らかであるように、全体呼出し式は括弧に包まれなければなりません。のの
だから、基本的に、彼はそれがより多くの関数値、および関数の値との区別を明確に感じています。だから、それは本当に、コード自体に実質的な違い文体の問題ではないのです。
が更新された基準は、古いPPTはもはや存在しないの
他のヒント
すぐに呼び出される匿名関数は、次の理由から括弧で囲まれます。
これらは関数式であり、括弧を省略すると、関数宣言として解釈され、構文エラーになります。
関数式を function という単語で始めることはできません。
関数式を変数に代入する場合、関数自体は返されず、関数の戻り値が返されます。
, したがって、括弧はその中にあるものを評価し、値を生成します。関数の実行時と末尾の括弧..}()
関数をすぐに実行します。
あるいは、使用ます:
void function () {
...
} ()