Локальные переменные внутри цикла собирают мусор? - PullRequest
1 голос
/ 11 октября 2011

Мне интересно, эффективнее ли помещать какие-либо переменные, на которые есть ссылки, внутри цикла, вне цикла - или они могут собирать мусор, как переменные внутри функции?

var obj = {key:'val'};
for(var i=0; i<10; i++){
    console.log(obj);
}

или

for(var i=0; i<10; i++){
    var obj = {key:'val'};
    console.log(obj);
}

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

Ответы [ 3 ]

6 голосов
/ 11 октября 2011

var - это функциональная область, а не блокированная, поэтому не имеет значения, появляются они внутри цикла или нет. Какова область видимости переменных в JavaScript? объясняет это различие.

Следующая версия JavaScript будет иметь let -области , и значение, хранящееся в них, станет коллекционным в конце выполнения тела цикла, если объявлено внутри цикла.

1 голос
/ 11 октября 2011

Ни один из них не будет собирать мусор, пока переменные не выйдут из scope .Область применения в Javascript представлена ​​функциями.Конструкция цикла никак не влияет на область видимости.

0 голосов
/ 11 октября 2011

Что касается сбора мусора, то, что говорят другие ответы, должно быть правдой, браузер обрабатывает сборку мусора, и не имеет значения, объявлена ​​ли переменная внутренне или внешне для цикла.

Что касается эффективности, ваш код был бы немного более оптимизирован для объявления переменной до цикла.

...