Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.05.2014, 11:47
Интересующийся
Отправить личное сообщение для FreeVice Посмотреть профиль Найти все сообщения от FreeVice
 
Регистрация: 16.05.2012
Сообщений: 18

Как разомкнуть замыкание?
вот этот код возвращает 2, 2, 2

как сделать, чтобы он возвращал 0, 1, 2? я уже стал создавать переменную и присваивать в нее i через parseInt(i.toString()), и потом класть в алерт - все-равно не помогает
var data = [];

for(var i = 0; i < 3; i++) {
    var b = parseInt(i.toString());
    var curr = function() { alert(b); };
    data.push(curr);
}

for(var j = 0; j < 3; j++) {
    data[j]();
}


http://jsfiddle.net/ateregulov/kdZ9h/
Ответить с цитированием
  #2 (permalink)  
Старый 15.05.2014, 11:56
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Классика жанра.
var data = [];

for(var i = 0; i < 3; i++) {
    var curr = (function(i) { return function() { alert(i); } })(i);
    data.push(curr);
}

for(var j = 0; j < 3; j++) {
    data[j]();
}


Ну, а вообще желательно ознакомиться с этим:
http://learn.javascript.ru/closures
http://learn.javascript.ru/closures-usage

Последний раз редактировалось jsnb, 15.05.2014 в 12:05.
Ответить с цитированием
  #3 (permalink)  
Старый 15.05.2014, 12:02
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

Название темы - зачёт.)
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 15.05.2014, 12:10
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Aetae Посмотреть сообщение
Название темы - зачёт.)
тоже порадовало)
Ответить с цитированием
  #5 (permalink)  
Старый 15.05.2014, 17:40
Интересующийся
Отправить личное сообщение для FreeVice Посмотреть профиль Найти все сообщения от FreeVice
 
Регистрация: 16.05.2012
Сообщений: 18

Сообщение от jsnb Посмотреть сообщение
Классика жанра.
var data = [];

for(var i = 0; i < 3; i++) {
    var curr = (function(i) { return function() { alert(i); } })(i);
    data.push(curr);
}

for(var j = 0; j < 3; j++) {
    data[j]();
}


Ну, а вообще желательно ознакомиться с этим:
http://learn.javascript.ru/closures
http://learn.javascript.ru/closures-usage
ох ты блин, а я проще сделал :-Р

добавил всего один new и вторая функция не нужна!!!!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как писать код который легко поддерживать, расширять, читать. Policeman Общие вопросы Javascript 3 24.03.2012 05:40
Как при быстром многократном клике по кнопке обрабатывать только первый клик battrack jQuery 3 22.03.2012 10:47
замыкание в пост запросе mcavalon AJAX и COMET 33 23.02.2012 18:51
Как отловить обратное событие "click" ? jsuse Общие вопросы Javascript 2 18.01.2012 00:16
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56