#javascript
#javascript
Вопрос:
Привет, у меня есть обратный вызов, который вызывается синхронно (т.Е. Я знаю порядок), просто дождитесь вызова callbcak
.someCallback(function () {
var abc = ['a', 'b', 'c'];
for (var i = 0; i < 3; i ) {
//closure
var outer = function (ii) {
alert(ii);
var inner = function (ii) {
return abc[ii];
}
return inner(ii);
} //closure
return outer(i);
}); //close loop
});
Я не использую никакой фреймворк, только raw .js; Я не могу получить доступ к коду вне этого обратного вызова.
Проблема либо в потере внутренней переменной, когда return outer(i)
; не удается пройти i= 0, либо пройти цикл, когда просто вызывается outer(i)
как это делается.
Комментарии:
1. Это неизбежно приведет к трем разным функциональным объектам с тремя разными возвращаемыми значениями, какой из которых вы хотите?
2. каждый раз, когда вызывается someCallBack, я хотел бы получить следующее значение: a, b, c
3. Тогда вам придется использовать для этого глобальную переменную. Это не очень рекомендуется.
4. Но тогда разве вы не должны вызывать функцию обратного вызова в цикле? Это упростило бы ситуацию
5. нет, это не вариант… (к сожалению), т. Е. Это проблема … или это невозможно, чтобы иметь динамический цикл или каким-то образом удерживать индекс цикла
Ответ №1:
Здесь не очень чисто, но работает:
var i = 0
.someCallback(function() {
var abc = ['a','b','c']
//closure
var outer = function(ii){
alert(ii)
var inner = function(ii){
return abc[ii];
}
return inner(ii);
}//closure
i = 1
return outer(i-1)
});//close function and call
Просто надеюсь, что это поможет!
Комментарии:
1. .someCallBack вызывается нажатием клавиши. каждый раз, когда нажимается клавиша, мне нужно, чтобы возвращалось следующее значение. Первое событие возвращает a, Следующее событие возвращает b, окончательное событие возвращает c … возможно ли это?
2. Вот так, используя глобальные переменные.
3. мне нужно проверить, могу ли я поставить переменную i = 0 после обратного вызова, но я проверю это позже, и если это так, я думаю, что это работает!
4. Что случилось с полу-приличным отступом кода? Ваше решение не очень разборчиво и вводит в заблуждение из-за кода с неправильным отступом. Кроме того, куда делся
for
цикл, который был в вопросе OP? Я не вижу, как ваш код выполняется 3 раза, как указано в OP.5. еще не проверял, но каждый раз, когда я нажимаю / вызываю обратный вызов, переменная
i
увеличивается.. это не асинхронный, я знаю, что он будет выполнен 3 раза; вот почему я пометил его как ответ..