вопрос отцам JavaScript

zya369


var Fs = [];
var i;
for(i = 0; i < 10; i++)
{
var X = i;
Fs.push(function{alert(X);})
}
Fs[3];


выводит 9. что нужно псделать, чтобы было 3 ?

Alexander08

var Fs = []
for(var i = 0; i < 10; i++)
{
Fs[i] = function{alert(i)}
}
Fs[3]
так попробуй

Alexander08

блин,херня.чет не соображу

livemix

втыкайте...

var Fs = [];
var i;
for(i = 0; i < 10; i++)
{
Fs.push( function(X){ return function { alert(X); }; }(i) ) ;
}
Fs[3];

zya369

var Fs = []; var i; for(i = 0; i < 10; i++) { Fs.push( function(X){ return function { alert(X); }; }(i) ) ; } Fs[3];
а немного пояснений можно ? :o
ЗЫ т.е. суть того что ты написал ясна, но почему мое не пашет - почему так криво функции создаются? :(
ЗЗЫ подправил заголовок :grin:

livemix

проблема там с областями видимости переменных. типа она конечно у тебя X выводит, но X у тебя все равно меняется. А вот когда ты параметр в функцию передаешь, то он уже реально становится "локальным".

artimon

http://dklab.ru/chicken/nablas/39.html
Читай про замыкания (closures)
Оставить комментарий
Имя или ник:
Комментарий: