!function(){}()vs(function(){})()
-
25-10-2019 - |
質問
Twitter Bootstrap JavaScriptで書かれたコードの一部を確認している間、彼らはすぐに呼び出しているように見えます。
!function( $ ) {
...
}(window.jQuery || window.ender);
私が伝統的にこの同じことがこのように達成されたのを見たところ:
(function($) {
...
})(window.jQuery || window.ender);
最初の方法は少しハッキーなように見えますが、2番目の方法ではなく、この方法でそれを行う理由や理由があるかどうかはわかりませんか? 私はそれがどのように機能するかを理解していることに注意してください、私は彼らがそれをするためにその方法を選んだ理由を理解したいと思っています。
解決
- 縮小したときの文字が1つ少ない。
-
!
他のJavaScriptコードがこれの前に連結され、後続のセミコロンがない場所を処理する必要があります。
大きな違いはありません。私はあなたがもっと快適だったものは何でも使います。あなたはおそらくあなたの例の先頭に何かを投げて、避けるべきです...
base.js
var lol = function() {
alert(arguments[0]);
}
im-concat-to-base.js
(function() {
// Irrelevant.
})();
先頭に投げます ;
そして彼女は働いています...
...またはa !
Twitterブートストラップのように...
他のヒント
彼らは両方とも、文法の曖昧さを乗り越える方法です。どちらも他の人よりも「ハッキー」ではありません。それは単なるスタイルの選択です。
これを行うこともできます:
0 + function( $ ) {
// ...
} ( window.jQuery || window.ender );
または:
parseInt(function( $ ) {
// ...
} ( window.jQuery || window.ender ) );
の評価ステップの代わりに !undefined
使用することもできます void
あいまいさを削除するオペレーター:
void function($) {
...
}(window.jQuery || window.ender);
それに一種のc品質があります;-)
私がまだ見ていない答えの1つは、括弧で機能全体を囲むことを避けることです。審美的な考慮事項以外では、これは、括弧を使用して線のインデントのレベルを決定する一部の編集者にとってプラスになる可能性があります。
所属していません StackOverflow