哪个是定义辅助函数的最佳方法?
我正在编写一个jQuery插件,但问题不仅限于jQuery,也不限于jQuery插件的工作方式。该插件具有以下设置代码
DELETE
我有一个使用$.fn.myPlugin = function(){
/* setup */
return this.each(function() {
var hasMax = /* logic */;
var maxVal = hasMax ? getMax() : undefined;
var hasMin = /* logic */;
var minVal = hasMin ? getMin() : undefined;
if(hasMin || hasMax) {
/* now do stuff */
}
};
};
,hasMax
,maxVal
和hasMin
生成消息字符串的方法。创建此函数的最佳/最佳/推荐位置在哪里,(1)在返回函数内部,以便它可以直接使用变量,(2)在返回函数之外并传递参数或(3)在插件函数之外?
我可以看到1和2之间可能存在差异,因为在minVal
函数中创建函数会多次创建它 - 这在实践中是否有很大的不同,特别是因为您不必通过周围的变量?
2和3之间会有区别吗?
选项1:
.each()
选项2:
$.fn.myPlugin = function(){
/* setup */
return this.each(function() {
var hasMax = /* logic */;
var maxVal = hasMax ? getMax() : undefined;
var hasMin = /* logic */;
var minVal = hasMin ? getMin() : undefined;
function createMessage(){
return /* do stuff with hasMax, maxVal, hasMin, minVal */;
}
if(hasMin || hasMax) {
/* now do stuff */
createMessage();
}
};
};
选项3:
$.fn.myPlugin = function(){
/* setup */
function createMessage(hasMax, maxVal, hasMin, minVal){
return /* do stuff with hasMax, maxVal, hasMin, minVal */;
}
return this.each(function() {
var hasMax = /* logic */;
var maxVal = hasMax ? getMax() : undefined;
var hasMin = /* logic */;
var minVal = hasMin ? getMin() : undefined;
if(hasMin || hasMax) {
/* now do stuff */
createMessage(hasMax, maxVal, hasMin, minVal);
}
};
};
在更通用的情况下,是
function createMessage(hasMax, maxVal, hasMin, minVal){
return /* do stuff with hasMax, maxVal, hasMin, minVal */;
}
$.fn.myPlugin = function(){
/* setup */
return this.each(function() {
var hasMax = /* logic */;
var maxVal = hasMax ? getMax() : undefined;
var hasMin = /* logic */;
var minVal = hasMin ? getMin() : undefined;
if(hasMin || hasMax) {
/* now do stuff */
createMessage(hasMax, maxVal, hasMin, minVal);
}
};
};
好于或差于
function a(){
var a, b, c, d;
function b(){
/* use a, b, c, d */
}
b();
}
请注意,插件包装在UMD包装器中,所以我相信(3)不会创建全局函数function b(a, b, c, d){
/* use a, b, c, d */
}
function a(){
var a, b, c, d;
b(a, b, c, d);
}