试图理解一个js文件

时间:2013-06-21 02:50:29

标签: javascript jquery

!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)?在功能体中,我们没有使用它们。

2 个答案:

答案 0 :(得分:2)

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

即使它没有在当前范围内使用,也可能是作者在实践中添加的

答案 1 :(得分:0)

您正在使用它们,但“_undefined”除外。

构造:

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

上述结构称为“立即函数”。该函数是在没有名称的情况下定义的,并且在您的案例jQuerythisdocument中立即使用底部传递的参数执行。

该函数不会污染全局空间,因为它甚至没有名称,但是它的闭包(在函数花括号之间定义的所有东西)都会烧掉你传递的值,所以里面的代码会有在函数执行后很久就可以访问这些变量。