3

重複の可能性:
関数の前の感嘆符は何をしますか?
!function ($) { $(function(){ }) }(window.jQuery) は何をしますか?

"!function($){}(window.jQuery)" の意味は何ですか?

<script type="text/javascript">
    !function($){
        //some codes here
    }(window.jQuery)
</script>

この js の元のコードの URL:<a href="http://twitter.github.com/bootstrap/assets/js/bootstrap-dropdown.js" rel="nofollow noreferrer">http://twitter.github.com/ブートストラップ/資産/js/bootstrap-dropdown.js

4

1 に答える 1

6

!行頭の は、関数を関数式に変換します。これは、より一般的な IIFE 形式と基本的に同じ効果¹ があります

(function($){}(window.jQuery));
//which in turn is the same as
(function($){})(window.jQuery);

次に、引数window.jQueryとして渡すことですぐに呼び出されます。これは、ページがモードで jQuery を使用しているかどうかに関係なく、関数内で参照する jQuery$を使用できる場合に便利です。$noConflict

このアプローチは、サードパーティが使用するプラグインを開発する場合に非常に一般的 (かつ推奨) です。

もう少し説明します。関数宣言は式の一部にすることはできません。したがって、 function キーワードを a 内に配置するか、単項演算子で前に置くと、関数式()として解釈されます。

¹ と の間には微妙な違いが(function(){}())あり!function(){}()ます。括弧は単に関数を関数式の形式で関数オブジェクトに評価しますが、単項!は同じことを行い、関数式の戻り値を反転します。この値は何にも割り当てていないため、単に破棄されます。

読み込み時間は 1 バイト、!実行時間は操作のコストです。これらはどちらもミリ秒/マイクロ秒の何分の1かしかかからないはずです。ほとんどの場合、コーディング スタイルの好みの問題です。

于 2013-01-12T02:56:39.330 に答える