Объявление переменной и скорость выполнения (компиляция, инициализация, оптимизация)

  • Автор темы Автор темы ~RA~
  • Дата начала Дата начала
Элементарно. Как поймаешь всех крокодилов, возьми ESTK и откомпили в бинари
JavaScript:
var i;
for (i = 0; i < 100; i++) {
     var b = i;
}
и
JavaScript:
var i,b;
for (i = 0; i < 100; i++) {
     b = i;
}
Должны получиться идентичные строки
 
Должны получиться идентичные строки
если заранее не знаешь, поправит за тобой компилятор/интерпретатор, то правильней инициализацию выносить из цикла. Имхо.
Идентичные с объявлением в самом начале, перед циклом, так? ;)
 
Последнее редактирование:
Да
 
А, вононо что, похоже, возникло некое недопонимание.
То, что некоторые воспринимают как оптимизацию кода компилятором, на самом деле - идеологическая особенность функционирования адобовского интерпретатора. Дело в том, что нельзя просто так взять и объявить локальную переменную в произвольном месте, написав соответствующую строку в коде. Яваскрипт машина, повторяю, создает все локальные переменные одновременно с блоком кода порождающей их функции, в каком бы месте они не были объявлены. Собственно, строка "var I" никакого кода не порождает вообще - это просто директива препроцессора добавить ещё одну (если нет такой же) локальную переменную к данной функции. Мы сейчас говорим именно об адобовской реализации, в браузерном яваскрипте все возможно.
 
Вот этого не надо ':(!!'
Обобщения изгадили мои слова
 
Кстати, если кого смущает область видимости (меня, например, ничуть), то во многих языках можно выкрутиться так:
for (int i = 0, b = 0; i < 100; i++) {
b = i;
}
 
Счеголь?
Мы здесь, вроде как, адобовский яваскрипт обсуждаем или не?
С другой стороны, это, судя по всему именно идеологическая фишка, общая для языка яваскрипт.
Попробуй набери в браузерной строке
JavaScript:
javascript:{var i=1;for(var i=0;i<10;i++);var i;alert(i);}
 
Выкинь свой яблофон, на андроидовском хроме яваскрипт с адресной строки запускается нормально. :4)
 
То, что некоторые воспринимают как оптимизацию кода компилятором

да не, я скорее о том, что в скрипте из 10 строчек, который выполняется за секунду пытаться чо-то ускорять и оптимизировать - нахрен не нужно.
 
в скрипте из 10 строчек
можно написать так, что повесит систему.
Повторюсь, если нет гарбадж коллектора, если мы не знаем как будет исполнятся написанное, то объявлять переменную в цикле не стоит.

Не по теме:
Кстати, я подобным образом на спор вешал оракловскую вм, правда пришлось добавлять все ссылки на объекты в коллекцию, чтобы гарбадж коллектор не высвобождал память.
 
Последнее редактирование: