Из-за того, как работают встроенные события (т. Е. Указанные в качестве атрибутов HTML).
Они, как правило, плохая идея по множеству причин (см. Много связанных сообщений), но ответ на ваш вопрос таков.
События, указанные как атрибуты HTML, так же как и строки. По сути, при щелчке по элементу строка, указанная в качестве значения атрибута, равна оценена (это должно дать вам подсказку относительно одной из причин, по которой они являются плохой идеей). По этой причине вы можете думать о событии, вызывающем запуск следующего JS:
sayHello(); //<-- invoke callback
Если вместо этого выполнить следующее, ничего не произойдет:
sayHello; //returns reference to callback to nowhere