0

我正在使用 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>");
            }
        }
4

1 回答 1

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提供了很多正确的建议

于 2011-07-25T15:35:30.373 回答