0
!function($, window, document, _undefined)
{
    XenForo.PrefixManager = function($select)
    {
        function update()
        {
            $checkboxes.each(function()
            {
                var $option = $select.find('option[value="' + this.value + '"]').attr('disabled', !this.checked);

                if (!this.checked && $option.is(':selected'))
                {
                    $select.find('option').first().attr('selected', true);
                }
            });
        }

        var $checkboxes = $($select.data('checkboxes')).click(update);

        update();
    };

    // *********************************************************************

    XenForo.register('select.PrefixManager', 'XenForo.PrefixManager');

}
(jQuery, this, document);

質問:

なぜこれらのパラメーター (window、document、_undefined) を設定するのですか? 関数本体では、それらを使用しませんでした。

4

2 に答える 2

2

これは、これらの変数名がローカル スコープ内の他のスクリプトによって上書きされないようにする方法です (クロージャを使用)。

現在のスコープでは使用されていませんが、作成者によって慣例として追加される可能性があります

于 2013-06-21T02:51:46.017 に答える
0

" " を除いてすべて使用しています_undefined

コンストラクト:

function(argument,..) {
}("value",...)

上記の構成は「即時関数」と呼ばれます。関数は名前なしで定義され、最後に渡された引数を使用してすぐに実行さjQuerythisますdocument

関数は名前さえ持っていないため、グローバル空間を汚染しませんが、そのクロージャー (関数の中括弧の間に定義されたすべてのもの) は、渡された値を焼き付けます。そのため、内部のコードはそれらにアクセスできます。関数が実行された後でも変数。

于 2013-06-21T03:33:28.877 に答える