// Запускаем функцию foo.
// Передаем ей ссылку на функцию обратного вызова,
// в которую будет передаваться текущее значение счетчика - "i"
foo( f unction( i ) {
// тут мы получаем значение счетчика
});
// foo - функция, в кот. крутиться цикл.
// Каждую итерацию она вызывает другую функцию - "callback"
// и предает ей значение счетчика.
function foo( callback ) {
for( var i = 0; i < 10; i +=1 ) {
callback( i );
}
}
Есть мысли с Application.Run, но пока додумать не могу.
Sub RunCallback()
Call foo("DoSomething")
End Sub
Function foo(callback)
Dim i As Integer
For i = 1 To 10
Application.Run Macro:=callback, Arg1:=i
Next
End Function
Sub DoSomething(i)
MsgBox i
End Sub
Johny, спасибо. По примеру: мне надо вернуть значение 10 раз не в DoSomething, а в RunCallback
Пока пришел к выводу, что это не возможно. Тут даже дело не в коллбеках, а в том, что в функции в js - это функции высшего порядка и они передаются по ссылке. Т.е. моя коллбек-функция из примера будет вызвана тамже, где объявлена и она будет видеть все переменные данной области.
Не удобно, блин...
Видимо, придется ограничится этим вариантом.
Смысл в том, что у меня будет видна x в коллбеке
Код
var x = 1;
foo( f unction( i ) {
// тут мы получаем значение счетчика
// x = 1
});
' только так?
Sub io()
Call x
End Sub
Sub x()
For i = 1 To 10
Call y
Next
End Sub
Sub y()
For i = 1 To 10
Call z
Next
End Sub
Sub z()
For i = 1 To 10
' do something
Next
End Sub
p.s.: полоса с кнопками регулярно скрывается. Т.е. я как пользователь даже код тегами оформить не могу
Sub io()
Dim data
data = x()
data = y(data)
data = z(data)
End Sub
Function x()
For i = 1 To 10
Next
x = data
End Function
Function y(data)
For i = 1 To 10
Next
y = newData
End Function
Function z(data)
For i = 1 To 10
Next
z = newData
End F unction
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук