【发布时间】:2013-08-07 09:04:48
【问题描述】:
让我们考虑简单的单例实现:
var singleton = function (Constructor) {
var singleton;
return function () {
if (!singleton) {
singleton = new Constructor();
}
return singleton;
};
};
我们可以将 singleton 变量的声明移到参数中:
var singleton = function (Constructor, singleton) {
return function () {
if (!singleton) {
singleton = new Constructor();
}
return singleton;
};
};
所以我只是对副作用感到好奇。
再举一个例子:
var counter = (function (i) {
return function () {
i = (i || 0) + 1;
return i;
};
}());
【问题讨论】:
-
counter的示例似乎不必要地复杂,每次调用时使用(i||0)。在外部函数中使用var i = 0;会更容易阅读并且更高效,然后内部函数可以是单行:return ++i;。
标签: javascript closures private