Кратко о статических локальных переменных в js - PullRequest
1 голос
/ 13 февраля 2012

Я читал, что вы можете смоделировать статические локальные переменные в js следующим образом:

function count() {
count.i++;
}
count.i = 0;

Хранение 'i' как свойства 'count' быстрее, чем использование global? например.

var i=0;
function count ()
{i++;
}

Просто вопрос сравнения производительности.

Спасибо.

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Теоретически глобальная переменная должна быть немного быстрее свойства, так как поиск свойства требует еще одного шага.

Однако производительность может сильно отличаться в разных браузерах, и доступ к переменным и свойствам - это такие быстрые операции, что любая разница в производительности будет иметь значение редко. Большинство других вещей, которые вы делаете в скрипте, займет намного больше времени.

1 голос
/ 13 февраля 2012

Кажется, что внешнее сохраненное значение быстрее. См. этот тест . Имеет значение, если вы назначите 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...