Страницы

Поиск по вопросам

пятница, 12 июля 2019 г.

Передача дополнительных параметров в callback функцию с использованием замыканий

Как видно из кода: при наступлении .onload имеет на входе e, как передать в callback функцию значение i, чтобы не заменить при этом необходимый e? for (var i in many_i) {
image[i].onload = (function (e) { var important_val1 = e.target; var important_val2 = index; })(i);
} Спасибо.


Ответ

Здравствуйте. Замыкания - очень мощный инструмент, но пользоваться им надо с некоторой настороженностью =) Дело в том, что в вашем примере, все созданные функции имеют доступ к переменной i из scope функции родителя. К одной и той же переменной i и при обращении к ней получают ее значение на момент обращения. Для того чтобы перебороть такое поведение все что вам нужно - зафиксировать значение i на момент создания функции callback'a. Этого можно добиться добавив в код временную функцию, которая сохранит в своем scope текущее значение i и возвратит функцию обработчик, которая, в свою очередь, будет иметь доступ к значению i зафиксированному в scope родительской временной функции Как то так. var i; for(i in many_i) { image[i].onload = (function(){ var closedI = i; return function (e) { console.log(closedI, e); } })() } Более доступно тема раскрыта здесь

Комментариев нет:

Отправить комментарий