Кажется, что внешнее сохраненное значение быстрее. См. этот тест . Имеет значение, если вы назначите count.i
внутри функции или за ее пределами. Назначение его вне функции показывает небольшую разницу. Я бы об этом не беспокоился.
Вы также можете учитывать это, чтобы эмулировать что-то статическое (добавленное в jsperf-test, это примерно так же быстро, как и присвоение глобальной переменной или внешне назначенного count.i
)
function counter(){
var i = 0;
return {
count: function(){i += 1;},
toString: function(){return i;},
valueOf: function(){return i;}
};
}
var foo = counter(), bar = counter();
foo.count();
bar.count();
bar.count();
console.log(bar); //=> 2
console.log(foo); //=> 1