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

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 197
Реакции
10 847
Элементарно. Как поймаешь всех крокодилов, возьми 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 861
Реакции
3 450
Должны получиться идентичные строки
если заранее не знаешь, поправит за тобой компилятор/интерпретатор, то правильней инициализацию выносить из цикла. Имхо.
Идентичные с объявлением в самом начале, перед циклом, так? ;)
 
Последнее редактирование:

_MBK_

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

_MBK_

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

_MBK_

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

~RA~

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

_MBK_

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

~RA~

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

_MBK_

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

_MBK_

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

Skvoznyak

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

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

~RA~

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

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