Уровень "Блэквудский дружок" нужно объяснить почему

не могу понять почему сначала идет функция питомца (pet.on(“hear”, speak);), а затем герой обращается к нему (hero.say(“Hello Kitty”);), хотя по логике сначала герой должен обратиться к питомцу, а питомец должен от ветить на запрос. Если функции питомца и героя поменять местами, то код не работает. Кто нить может разъяснить пжлста?

// Теперь у Вас есть питомец!
function speak(event) {
    pet.say("Meow");
}
// Это указывает на то, что ваш питомец использовал функцию  speak(), когда что-то услышал.
pet.on("hear", speak);
// Поговорите со своим питомцем!
hero.say("Hello Kitty");

Отвечаю сам на свой вопрос - сначала активируется функция pet.on(); а затем уже герой спрашивает, а питомец отвечает, если поменять местами, то герой спрашивает, но питомец не может ответить, потому что функция еще не активна. всем спасибо))