Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Тут собираем годные задачи (javascript) (https://javascript.ru/forum/offtopic/32201-tut-sobiraem-godnye-zadachi-javascript.html)

Maxmaxmахimus 11.10.2012 17:03

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

а нужно чтобы она создавалась каждый раз когда начинается выполнение блока )) подобно тому как это делает оператор let

DimaJS 11.10.2012 17:05

Maxmaxmахimus,
WTF???:blink: переведи нормально:)

DjDiablo 11.10.2012 18:11

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

alert (i);
for(var i=0;i<10;i++){        }
alert (i);

Maxmaxmахimus 11.10.2012 18:14

нужно чтобы переменная ololo создавалась каждый раз РАЗНАЯ при каждой итерации цикла. а не использовалась одна и та же

DimaJS 11.10.2012 20:26

Maxmaxmахimus,
:blink: :blink: :
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

DjDiablo 11.10.2012 20:56

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);//зато видно МЕНЯ !!!!!!!!!

DimaJS 11.10.2012 21:10

DjDiablo,
это не так страшно, его видно, память он не жрёт (по крайней мере в FF), и его можно удалить (естественно через
someObject = null;
):)

Maxmaxmахimus 11.10.2012 22:15

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 ОПА

monolithed 12.10.2012 00:29

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])

DjDiablo 12.10.2012 00:55

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

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


Часовой пояс GMT +3, время: 19:35.