关闭或其他全球功能?

时间:2014-01-07 20:39:20

标签: javascript

哪种解决方案更好(根据最佳做法,性能......)?

A)两个全局函数

    var optDatePart = function optDatePart(num)
    {
        var num = Math.abs(num);
        return (num < 10 ? "0" : "") + num;
    };

    var getFormattedDate = function getFormattedDate()
    {
        var date = new Date();
        return date.getFullYear() + "-" +
                optDatePart(date.getDate()) + "-" +
                optDatePart(date.getMonth() + 1) + " " +
                optDatePart(date.getHours()) + ":" +
                optDatePart(date.getMinutes());
    };

B)关闭

var getFormattedDate = (function()
{
    var optDatePart = function optDatePart(num)
    {
        var num = Math.abs(num);
        return (num < 10 ? "0" : "") + num;
    };

    return function getFormattedDate()
    {
        var date = new Date();
        return date.getFullYear() + "-" +
                optDatePart(date.getDate()) + "-" +
                optDatePart(date.getMonth() + 1) + " " +
                optDatePart(date.getHours()) + ":" +
                optDatePart(date.getMinutes());
    };

}) ();

第一个功能仅用于第二个功能。

2 个答案:

答案 0 :(得分:2)

都不是。为什么要打扰外面的IIFE?

如果第一个函数仅在第二个函数中使用,只需将一个函数放在另一个函数中:

function getFormattedDate()
{
    function optDatePart(num)
    {
        var num = Math.abs(num);
        return (num < 10 ? "0" : "") + num;
    };

    var date = new Date();
    return date.getFullYear() + "-" +
            optDatePart(date.getDate()) + "-" +
            optDatePart(date.getMonth() + 1) + " " +
            optDatePart(date.getHours()) + ":" +
            optDatePart(date.getMinutes());
};

答案 1 :(得分:1)

闭包几乎总是比混淆全局命名空间(即冲突)更受欢迎。