@KnightForce

Циклы, Вынести переменную или объявлять внутри при каждой итераиции?

Есть цикл, обрабатывающий неизвестное количество элементов - от 1 до 1000.
Какой вариант производительнее?
1.
var a = null;
for(){
    //Всякие действия
    a=somevalue
}


2.
for(){
    //Всякие действия
   var a=somevalue;
   //Можно добавить a=null, чтобы гарантированно не было утечек памяти
}


1) В первом случае переменная объявляется только 1 раз, но идет обращение к замыканию.

2) Во втором все в локальной области видимости, но происходит определение переменой.
  • Вопрос задан
  • 199 просмотров
Пригласить эксперта
Ответы на вопрос 3
В чем вопрос то?
Ответ написан
Комментировать
от 1 до 1000 элементов

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

Если уж интересует производительность, то это очень зависит от используемого движка. У меня в SpiderMonkey (Firefox), например, второй вариант при миллиарде элементов в среднем на сотню миллисекунд быстрее (что-то вроде 916ms для первого и 832ms для второго варианта). Но в V8 и Chakra результаты могут быть другими. Да и кто Вам мешает свои тесты провести?

Но всё-таки, даже при миллиарде элементов разница незначительная. Стоит ли заморачиваться такими вещами при тысяче элементов, если разница будет меньше одной миллисекунды (то есть по факту разницы не будет)?
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
var, где бы вы его ни написали, «поднимается» наверх при интерпретации кода – это называется var hoisting. Поэтому ваши варианты 1) и 2) не имеют разницы. Возможно, во 2-м варианте вы имели в виду let вместо var?

Проверять перформанс можете и сами console.time(), и приглашать других на jsPerf. Тысячи итераций недостаточно, пробуйте миллион, миллиард.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы