Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #61 (permalink)  
Старый 11.10.2012, 17:03
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

ololo создается только один раз когда скрипт входит в контекст функции или чего там.

а нужно чтобы она создавалась каждый раз когда начинается выполнение блока )) подобно тому как это делает оператор let
Ответить с цитированием
  #62 (permalink)  
Старый 11.10.2012, 17:05
Интересующийся
Отправить личное сообщение для DimaJS Посмотреть профиль Найти все сообщения от DimaJS
 
Регистрация: 14.08.2012
Сообщений: 26

Maxmaxmахimus,
WTF??? переведи нормально
Ответить с цитированием
  #63 (permalink)  
Старый 11.10.2012, 18:11
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

думаю речь об этом.

alert (i);
for(var i=0;i<10;i++){        }
alert (i);
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 11.10.2012 в 18:16.
Ответить с цитированием
  #64 (permalink)  
Старый 11.10.2012, 18:14
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

нужно чтобы переменная ololo создавалась каждый раз РАЗНАЯ при каждой итерации цикла. а не использовалась одна и та же
Ответить с цитированием
  #65 (permalink)  
Старый 11.10.2012, 20:26
Интересующийся
Отправить личное сообщение для DimaJS Посмотреть профиль Найти все сообщения от DimaJS
 
Регистрация: 14.08.2012
Сообщений: 26

Maxmaxmахimus,
:
for (var i = 0, someObject = {}; i < 10; i++) {
 if (someObject.ololo) alert("Я никогда не выполнюсь!!!");
 someObject.ololo = i;
 alert(someObject.ololo);
 delete someObject.ololo;
}
alert(someObject.ololo);//меня не видно :D
Ответить с цитированием
  #66 (permalink)  
Старый 11.10.2012, 20:56
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

DimaJS - в примере маленький недостаток, в виде оставшегося бесхозного ОБЬЕКТА.

for (var i = 0, someObject = {}; i < 10; i++) {
 if (someObject.ololo) alert("Я никогда не выполнюсь!!!");
 someObject.ololo = i;
 alert(someObject.ololo);
 delete someObject.ololo;
}
alert(someObject.ololo);//меня не видно :D

alert(someObject);//зато видно МЕНЯ !!!!!!!!!
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 11.10.2012 в 21:03.
Ответить с цитированием
  #67 (permalink)  
Старый 11.10.2012, 21:10
Интересующийся
Отправить личное сообщение для DimaJS Посмотреть профиль Найти все сообщения от DimaJS
 
Регистрация: 14.08.2012
Сообщений: 26

DjDiablo,
это не так страшно, его видно, память он не жрёт (по крайней мере в FF), и его можно удалить (естественно через
someObject = null;
)
Ответить с цитированием
  #68 (permalink)  
Старый 11.10.2012, 22:15
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

var funcs = [];

for ( i = 0; i<10; i++ ) {
    var ololo = i;
    funcs[i] = function(){  alert( ololo )  };
}


funcs[0] () // 0??? нет 9!! откуда 9 ??
funcs[4] () // 4??? нет!! 9, а должно 4


Вообще это общеизвестная проблема, но нубы не часто с ней сталкивались по этому не особо втулили что от них требвовалось)



var funcs = [];

for ( i = 0; i<10; i++ ) try{throw 0} catch( ololo ) {
    ololo = i;
    funcs[i] = function(){  alert( ololo )  };
}


funcs[0] () // 0 ОПА
funcs[4] () // 4 ОПА

Последний раз редактировалось Maxmaxmахimus, 11.10.2012 в 22:31.
Ответить с цитированием
  #69 (permalink)  
Старый 12.10.2012, 00:29
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Maxmaxmахimus,

На всякий:

var foo = [];

for (var i = 0; i < 10; i++) {
   foo.push(function(i) {
      return function() {
          alert(i);
      };
   }(i));
}

foo[0]();
foo[4]();


На CoffeeScript это конечно элегантней будет:

foo = ((do (i) -> -> i) for i in [0..10])

Последний раз редактировалось monolithed, 12.10.2012 в 00:53.
Ответить с цитированием
  #70 (permalink)  
Старый 12.10.2012, 00:55
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

monolithed - помоему перемудрил
вот так было бы почитабельней

var foo = [];
      for (var i = 0; i < 10; i++) (function(i) {
        
       foo.push(function(){
          alert (i);
        } );
      
      })(i);
foo[0]();
foo[4]();
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 12.10.2012 в 01:01.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи по Java and JavaScript Другое Имя Работа 1 26.10.2011 00:11
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Подходит ли Javascript для решения следующей задачи? alikol Оффтопик 4 24.10.2010 22:40
Подходит ли Javascript для решения следующей задачи? alikol Общие вопросы Javascript 7 24.10.2010 14:10
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34