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

  • Автор темы Автор темы ~RA~
  • Дата начала Дата начала
В общем, с одной стороны область видимости, а с другой переинициализация, может даже с перевыделением памяти. И если заранее не знаешь, поправит за тобой компилятор/интерпретатор, то правильней инициализацию выносить из цикла. Имхо.

разница примерно
а если там не лекговесный int, а что-то потяжелее?
 
И если заранее не знаешь
В данном случае вариантов нет - повторяю, во всех известных мне скриптах локальные переменные создаются вместе с родительским блоком кода. Как только доберусь до ESTK проверю именно на последних примерах
 
Преждевременная оптимизация — корень всех (или большинства) проблем в программировании. © Кнут
 
Темна вода во облацех адобовской javascript-реализации.
Все прозрачно. Как я и говорил, код
JavaScript:
$.hiresTimer
for (var i = 0; i < 1000000000; i++) {
    var b = i;
}
$.writeln($.hiresTimer)
var b;
$.hiresTimer
for (var i = 0; i < 1000000000; i++) {
    b = i;
}
$.writeln($.hiresTimer)
компилируется вот так
JavaScript:
var i,b;
{
$.hiresTimer;
//Line: 1
for (  i=0 ; i<0x3B9ACA00 ; i = i+1)
{
//Line: 2
b = i;
}
//Line: 4
$.writeln($.hiresTimer);
//Line: 6
$.hiresTimer;
//Line: 7
for (  i=0 ; i<0x3B9ACA00 ; i = i+1)
{
//Line: 8
b = i;
}
//Line: 10
$.writeln($.hiresTimer);
}
А посему обе части эквивалентны и то, что они у тебя работают с разной скоростью - неведомая ёлочная хвоя
 
А смысл? Если эксперимент противоречит теории - значит он был поставлен некорректно.
 
Значит, поставь эксперимент правильно. А лучше -- серию.
 
У меня естк нет под рукой. А объяснений почему один и тот же кусок кода может работать с разной скоростью - миллион. От кэширования до фрагментации памяти. Вдобавок, ты ж небось текстовый вариант запускал а не бинарный.
 
Ну мало ли. Может на лету каждый блок кода компилит? Попробуй бинарный
 
вообще, больше всего тут интересно что

Код:
for (var i = 0; i < 100; i++) {
    var b = i;
}
var b;
$.writeln(b);

выдает 99.

поэтому я всегда теперь при объявлении переменных еще и '=undefined' им стараюсь дописывать, а то может фигня произойти.
 
погрешность измерения. полсекунды тут это же какая-то неведомая доля процента.
Тем не менее, нужно ж доискаться до истины - почему идентичные куски кода работают с разной скоростью.
А они реально идентичные, могу просто в бинарнике показать для сравнения.
 
не удивляет ) но по уму вроде это уже другая область видимости (scope), и объявленная внутри цикла переменная не должна быть видна вне его (?) хотя могу ошибаться
 
Новогоднее чудо!

не удивляет ) но по уму вроде это уже другая область видимости (scope), и объявленная внутри цикла переменная не должна быть видна вне его (?) хотя могу ошибаться
Ну как видишь - в случае адобовского яваскрипта видимость локальных переменных - внутри функций.
 
Последнее редактирование: