如何在避免YUICompressor警告的同时防止Javascript中的全局命名空间污染?

时间:2011-07-25 15:22:39

标签: jquery yui-compressor

我正在使用YUICompressor来压缩我的jQuery插件。最初我收到很多警告“尝试只有一个var语句和每个函数一个返回”,所以我将所有声明放在顶部,如下例所示:

        $.fn.myWidget = function () {

            var function1, function2, function3

            function1 = function () {

                // Do stuff

            };

            function2 = function () {

                // Do stuff

            };

            // This will be a global function
            function3 = function () {

                // Do stuff

            };

        };

在更大的插件中,这成为代码维护的噩梦。

假设我添加了一个function4,但是我忘了添加变量声明添加顶部,现在我实际上是在全局窗口命名空间中创建一个变量。 如果插件在页面上多次使用,则全局函数会被覆盖。

现在我正在运行以下脚本来检查全局命名空间污染,但我想知道是否有人有更好的解决方案

        for (var f in window) {
            if (window.hasOwnProperty(f)) {
                $("#debug").append(f + " " + " Type: " + typeof window[f] + "<br>");
            }
        }

1 个答案:

答案 0 :(得分:1)

我更喜欢以地图形式声明函数,它消除了将声明与代码分离的问题,即。

$.fn.myWidget = function () {

        var a, b, c, //internal vars
         myWidget = {
            function1: function () {

            // Do stuff

            },
            function2: function () {

            // Do stuff

            },
            function3: function () {

            // Do stuff

            }
        }

        return myWidget;

    };

为什么你的小部件中有全局功能?这不是打败小部件的目的吗?只是把它放在小部件的声明之外。 重读这个问题,是的,使用这种风格也消除了意外地发挥全局功能。

此外,jQuery DOCs为正确执行提供了很多好建议