定义函数内部或外部传递参数的函数

时间:2018-05-29 09:32:33

标签: javascript

哪个是定义辅助函数的最佳方法?

我正在编写一个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 */ } }; }; hasMaxmaxValhasMin生成消息字符串的方法。创建此函数的最佳/最佳/推荐位置在哪里,(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); }

0 个答案:

没有答案
相关问题