29

Twitter Bootstrap Javascript で記述されたコードの一部を確認しているときに、次のような匿名関数をすぐに呼び出しているようです。

!function( $ ) {

     ...

}(window.jQuery || window.ender);

これと同じことがこの方法で達成されるのを私が伝統的に見てきました:

(function($) {

    ...

})(window.jQuery || window.ender);

最初の方法は少しハックに思えますが、2 番目の方法よりもこの方法を使用する利点や理由があるかどうかはわかりません。 私はそれがどのように機能するかを理解していることに注意してください.なぜ彼らがその方法を選んだのかを理解しようとしています.

4

4 に答える 4

20
  • 縮小すると1文字減る。
  • !、他の JavaScript コードがこの前に連結され、末尾にセミコロンがない場所を処理する必要があります。

大きな違いはありません。私はあなたがより使いやすいものを使用します。回避するために、おそらく例の最初に何かを投げる必要があります...

base.js

var lol = function() {
   alert(arguments[0]);
}

im-concat-to-base.js

(function() {
    // Irrelevant.
})();

jsFiddle .

リードを投げる;と、彼女は働きます...

jsFiddle .

...または!Twitter Bootstrap のようなもの...

jsFiddle .

于 2011-11-29T04:41:30.680 に答える
14

どちらも、文法のあいまいさを乗り越える方法です。どちらも他方よりも「ハック」ではありません。それは単なるスタイルの選択です。

これを行うこともできます:

0 + function( $ ) {
  // ...
} ( window.jQuery || window.ender );

または:

parseInt(function( $ ) {
  // ...
} ( window.jQuery || window.ender ) );
于 2011-11-29T04:41:01.540 に答える
3

評価ステップの代わりに、演算子を使用してあいまいさを取り除く!undefinedこともできます。void

void function($) {
     ...
}(window.jQuery || window.ender);

それに一種のC品質があります;-)

于 2013-04-25T01:55:34.823 に答える
1

私がまだ見ていない答えの 1 つは、関数全体を括弧で囲むことを避けることです。審美的な考慮以外に、これは括弧を使用して行のインデントのレベルを決定する一部の編集者にとってプラスになる可能性があります。

于 2016-09-05T14:10:23.510 に答える