Javascript:嵌套私有函数 - 好还是坏?

时间:2012-08-08 21:37:19

标签: javascript function nested

我经常使用这种结构:

var example = (function () {
    function privateFn2 () {
       ...
    }
    function privateFn1 () {
       ...
    }
    return {
        publicMethod1: function () {...
        },
        publicMethod2: function () {...
        }
    };
}());

我想知道的是:如果privateFn1是调用privateFn2的唯一函数/方法,那么将它设置为更好的做法如下所示?

为清晰起见而已编辑

var example = (function () {
    function privateFn1() {
        function privateFn2() {
        }
        ...
        privateFn2();
    }
    return {
        publicMethod1: function () {...
        },
        publicMethod2: function () {...
        }
    };
}());

当然,这是一个非常简单的例子。问题是我有很多私有函数,我想知道嵌套是否被很好地考虑。我认识到这很可能是一个偏好问题,但任何建议都会感激不尽。

感谢。

2 个答案:

答案 0 :(得分:5)

这取决于具体情况。如果你有几个只与另一个私有函数相关的私有函数,那么这可能就是对象或类包含的功能应该是它应该是的。

以下是一些问题:

  • 这些私人功能有副作用吗?那就是他们 操纵任何封闭的属性?如果没有,这是否有些概括 可以静态实现并包含在内的逻辑 分别?或者,这些私有函数是否操纵了子集 可以移动到另一个类或对象的属性?
  • 私有函数是否可以在其中使用简单的任务特定辅助函数 更大的算法或控制功能;例如用于排序的过滤功能 数组,还是其他一些迭代回调?如果是这样,那么事实上可能就是这样 清理器将这些功能嵌套在内部并使它们超出主要范围 宾语。其他任何代码都需要这些功能吗?
  • 主要私人功能会被调用多少次?如果它会被称为非常 经常(在循环内或在计时器间隔内)然后嵌套 内部的私人职能可能产生可衡量的开销 - 如果私人功能可以忽略不计 只是偶尔打电话。

总是需要考虑权衡,考虑这些问题可以帮助您确定最适合您特定情况的问题。

答案 1 :(得分:3)

我会避免你的第二个例子。每次调用privateFn1时,它都会重新定义privateFn2。为什么不做一次呢?您甚至可能需要稍后在其他地方使用它。

但是,如果你真的想要隐藏privateFn2,那么更好的解决方案就是:

var privateFn1 = (function () {
    function privateFn2() {
        // ...
    }

    return function () {
        privateFn2();
        // ...
    };
})();