ololo создается только один раз когда скрипт входит в контекст функции или чего там.
а нужно чтобы она создавалась каждый раз когда начинается выполнение блока )) подобно тому как это делает оператор let |
Maxmaxmахimus,
WTF???:blink: переведи нормально:) |
думаю речь об этом.
alert (i);
for(var i=0;i<10;i++){ }
alert (i);
|
нужно чтобы переменная ololo создавалась каждый раз РАЗНАЯ при каждой итерации цикла. а не использовалась одна и та же
|
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
|
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,
это не так страшно, его видно, память он не жрёт (по крайней мере в FF), и его можно удалить (естественно через someObject = null;):) |
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,
На всякий:
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 - помоему перемудрил
вот так было бы почитабельней
var foo = [];
for (var i = 0; i < 10; i++) (function(i) {
foo.push(function(){
alert (i);
} );
})(i);
foo[0]();
foo[4]();
|
| Часовой пояс GMT +3, время: 01:43. |