Когда вы "вешаете" обработчик событий через addEventListener, вторым аргументом вы указываете функцию, которая должна будет выполнится, когда пользователей будет как-либо взаимодействовать с элементом, причём функция указывается без скобок:
document.querySelector('div').addEventListener('click', func);
, что вполне логично, ведь нам важен не код функции, а не её результат.
Однако, если добавить обработчик событий через соответствующий определённому событию html атрибут, то после функции надо ставить скобки:
<div onclick="func()"></div>
. Почему в этом случае скобки надо ставить, а в первом - нет?