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

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 231
Реакции
10 852
Элементарно. Как поймаешь всех крокодилов, возьми 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;
}
Должны получиться идентичные строки
 

JAW

15 лет на форуме
Сообщения
15 797
Реакции
3 454

~RA~

Одарённая.
Топикстартер
12 лет на форуме
Сообщения
11 919
Реакции
3 469
Должны получиться идентичные строки
если заранее не знаешь, поправит за тобой компилятор/интерпретатор, то правильней инициализацию выносить из цикла. Имхо.
Идентичные с объявлением в самом начале, перед циклом, так? ;)
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 231
Реакции
10 852
Да
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 231
Реакции
10 852
А, вононо что, похоже, возникло некое недопонимание.
То, что некоторые воспринимают как оптимизацию кода компилятором, на самом деле - идеологическая особенность функционирования адобовского интерпретатора. Дело в том, что нельзя просто так взять и объявить локальную переменную в произвольном месте, написав соответствующую строку в коде. Яваскрипт машина, повторяю, создает все локальные переменные одновременно с блоком кода порождающей их функции, в каком бы месте они не были объявлены. Собственно, строка "var I" никакого кода не порождает вообще - это просто директива препроцессора добавить ещё одну (если нет такой же) локальную переменную к данной функции. Мы сейчас говорим именно об адобовской реализации, в браузерном яваскрипте все возможно.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 231
Реакции
10 852
Вот этого не надо ':(!!'
Обобщения изгадили мои слова
 

~RA~

Одарённая.
Топикстартер
12 лет на форуме
Сообщения
11 919
Реакции
3 469
Кстати, если кого смущает область видимости (меня, например, ничуть), то во многих языках можно выкрутиться так:
for (int i = 0, b = 0; i < 100; i++) {
b = i;
}
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 231
Реакции
10 852
Счеголь?
Мы здесь, вроде как, адобовский яваскрипт обсуждаем или не?
С другой стороны, это, судя по всему именно идеологическая фишка, общая для языка яваскрипт.
Попробуй набери в браузерной строке
JavaScript:
javascript:{var i=1;for(var i=0;i<10;i++);var i;alert(i);}
 

~RA~

Одарённая.
Топикстартер
12 лет на форуме
Сообщения
11 919
Реакции
3 469

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 231
Реакции
10 852
Выкинь свой яблофон, на андроидовском хроме яваскрипт с адресной строки запускается нормально. :4)
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
То, что некоторые воспринимают как оптимизацию кода компилятором

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

~RA~

Одарённая.
Топикстартер
12 лет на форуме
Сообщения
11 919
Реакции
3 469
в скрипте из 10 строчек
можно написать так, что повесит систему.
Повторюсь, если нет гарбадж коллектора, если мы не знаем как будет исполнятся написанное, то объявлять переменную в цикле не стоит.

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