Javascript:私有函数的嵌套-好还是坏?
我经常使用这种结构:Javascript:私有函数的嵌套-好还是坏?,javascript,function,nested,Javascript,Function,Nested,我经常使用这种结构: var example = (function () { function privateFn2 () { ... } function privateFn1 () { ... } return { publicMethod1: function () {... }, publicMethod2: function () {... }
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 () {...
}
};
}());
当然,这是一个非常简单的例子。问题是我有很多私有函数,我想知道嵌套是否受到重视。我承认这很可能是一个偏好的问题,但任何建议都将得到感激
谢谢。我不想再举第二个例子了。每次调用
privateFn1
时,它都会重新定义privateFn2
。为什么不做一次呢?以后你甚至可能需要在其他地方使用它
但是,如果您真的想隐藏privateFn2
,更好的解决方案是:
var privateFn1 = (function () {
function privateFn2() {
// ...
}
return function () {
privateFn2();
// ...
};
})();
这要视情况而定。如果您有几个只与另一个私有函数相关的私有函数,那么可能在这种情况下,对象或类正在打包更多的功能 这里有一些问题要问:
- 这些私人功能有副作用吗?也就是说,是吗 操纵任何封闭属性?如果不是,这是某种广义的吗 可以静态实现并包含的逻辑 分别地或者,这些私有函数是在处理 可以移动到其他类或对象的属性
- 私有函数是否是要在中使用的简单任务特定的辅助函数 较大的算法或控制功能;例如,用于对数据进行排序的筛选函数 数组,还是其他类型的迭代回调?如果是这样,那么事实上可能是这样 cleaner将这些函数嵌套在内部,并使它们不在main的范围内 对象其他代码是否需要这些函数
- 主私有函数将被调用多少次?如果它将被称为非常 频繁地(在循环内或在计时器间隔上),然后嵌套 内部的私有函数可能会产生可测量的开销-- 如果没有私人功能,这一点本来可以忽略不计 我只是偶尔接到电话
总而言之,考虑这些问题会帮助你决定什么是对你的特定情况最好的。我明白你在说什么,但是你不会返回相同的东西。我已经编辑了我的意思使它更清晰。我很确定这是一样的:)出于好奇,为什么要混合函数声明样式?而且,在我看来,这样嵌套私有函数是没有意义的。把他们分开。我知道您在另一个函数中看不到
privateFn2
的任何用途,但如果您将其置于privateFn1
之外,则其工作原理相同。它还避免了重新声明privateFn2
。此外,请将privateFn2
的内容放在privateFn1
中,或者将privateFn2
放在与privateFn1
相同的范围内。谢谢,@TylerCrompton。在回答您的问题时,我想我混合了函数声明样式,因为(1)在我的例子中,使用私有方法而不是函数通常没有好处,因为我没有使用this
,因此调用函数更整洁(并且最小化),和(2)var示例=(…())代码>最终成为一个有方法的对象-我想您已经意识到;)在代码的第二部分中,我省略了外部结构,但为了清晰起见,我对其进行了编辑。它已经被var示例模式隐藏了:)谢谢:)它们通常是“特定于任务的助手函数”,顺便说一句。