我正在使用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>");
}
}
答案 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为正确执行提供了很多好建议