Поведение test3() и test4() я понимаю. Знаете, что меня всегда удивляло? Не могу понять, почему test2() всё-таки выполняется. Мистика!
Сначала я думал, что объявления классов и функций происходит в два этапа — сначала «безусловное» при разборе кода, а потом «условное» в runtime. Сейчас я подозреваю, что всё проще: определение ф-ции становится видимым при входе в тот блок, где они объявлены.
P.S. Эй,
