Увеличивает ли использование var в узком цикле JavaScript издержки, связанные с памятью? - PullRequest
5 голосов
/ 04 мая 2011

Например, будет ли это:

while (true) {
    var random = Math.random();
}

... менее эффективным, чем следующее, в большинстве реализаций?

var random;
while (true) {
    random = Math.random();
}

Спасибо за ваш вклад.

Редактировать : В случае, если это не было очевидно, меня больше всего беспокоит множество повторных (де) распределений, происходящих в этом примере.

Ответы [ 5 ]

8 голосов
/ 04 мая 2011

JavaScript не имеет блока видимости.

В первом примере объявление var text: поднято из блока while. В обоих случаях переменная объявляется только один раз. В обоих случаях переменной присваивается значение один раз за итерацию цикла while.

var

  • function -scoped
  • подъем до вершины своей функции
  • переопределения с одинаковыми именами в одной и той же области действия не допускаются
1 голос
/ 04 мая 2011

JavaScript не имеет области видимости блока, и объявление random будет в любом случае поднято в верхнюю часть его области ( объект переменной ).

1 голос
/ 04 мая 2011

Нет, переменные инициируются при входе в область действия, поэтому random существует еще до того, как оператор var будет достигнут.

0 голосов
/ 04 мая 2011

Дуглас Крокфорд рекомендует помещать все назначения переменных в верхнюю часть функции, то есть вне любых циклов.

0 голосов
/ 04 мая 2011

Это зависит от реализации переводчика. Строго говоря, да, у него могут быть немного более высокие издержки; но в зависимости от механизма GC это тоже должно быть достаточно быстро очищено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...