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);

问题:

为什么我们要放置这些参数(窗口、文档、_undefined)?在函数体中,我们没有使用它们。

4

2 回答 2

2

这是一种保护这些变量名称不被本地范围内的其他脚本覆盖的方法(使用闭包)。

尽管它没有在当前范围内使用,但作者可能会根据实践添加它

于 2013-06-21T02:51:46.017 回答
0

除了“”之外,您都在使用它们_undefined

构造:

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

上述构造称为“立即函数”。该函数在没有名称的情况下定义,并使用底部传递的参数立即执行,在您的情况下jQuerythis, 和document.

该函数不会污染全局空间,因为它甚至没有名称,但是它的闭包(在函数花括号之间定义的所有内容)会烘焙您传递的值,因此内部的代码将可以访问那些甚至在函数执行很久之后的变量。

于 2013-06-21T03:33:28.877 回答