belyankin12, у Вас получилось объяснение на основе сравнения свойств. Это как сравнивать по высоте дом и дерево, где дерево растёт само и ждать долго, а дом можно построить высоким за месяц, в то время как это объекты, описывающие разные принципы, а парсинг, это совсем другое.
В Вашем первом примере, в теле цикла не прасинг происходит, а обращение к элементам массива по индексу.
Loop - организует цикл, повторяющий своё тело n раз, или бесконечно, если не получил условия.
For - создаёт объект-перечислитель, метод Next() которого, извлекает ключ и его значение свойств объекта по алфавиту до тех пор, пока результат не вернёт пустое значение, если вычисленное выражение является объектом. Справка:
obj := {"count": 4, "item": "book"}
_enum := (obj).NewEnum()
if IsObject(_enum)
while _enum.Next(Key, Value)
{
MsgBox % "Key = " Key "`nValue = " Value
}
Military, в Вашем примере, строка:
SendNumFn := Func("SendNum").Bind(v)
Сохраняет ссылку в переменной SendNumFn, на функцию с именем SendNum и .Bind(v) - устанавливает значение параметра, который будет передан ей при вызове. Согласно порядку, эти значение будут идти от 1 до 5 включительно по порядку, ключей массива, перечисляемого циклом For.
Далее, строка:
SetTimer % SendNumFn, % "-" rnd(1, 100)
Создаёт то же количество таймеров, вызывающие функцию SendNum, обращаясь к её вызову по ссылке из SendNumFn, которая в свою очередь должна напечатать: "12345", но поскольку таймеры вызываются со случайным интервалом от 1 до 100 миллисекунд, получается случайный порядок печатаемых цифр и поскольку интервал таймера указывается отрицательным, таймер вызывается только один раз для каждой ссылки.