Это сложно.Поскольку точка с запятой отсутствует во второй строке вашего кода, синтаксический анализатор на этом не останавливается - и использует все возможные токены.В конце код анализируется как ...
btn.onclick = function clickHandler() {
console.log("Button clicked");
}(
//btn.onclick = function clickHandler(){console.log("Now clicked"); };
function() {
console.log("Hello");
}
)
();
Обратите внимание на разницу, которую создает ()
- ваше функциональное выражение вызывается немедленно .Забавно, что ...
function() { console.log('Hello') }
... рассматривается как значение параметра, которое в любом случае игнорируется.
После этого результат clickHandler
Попытка повторного использования в качестве функции - но, поскольку он возвращает undefined
, JS останавливается с (intermediate value)(...) is not a function
.
Думал, что будет хорошей идеей немного изменить ваш код - и сделал следующеефрагмент, чтобы проиллюстрировать идею с большим количеством драмы.
const btn = document.getElementById('btn');
btn.onclick = function clickHandler(e) {
console.log('Now clicked');
return e;
}
//btn.onclick = function clickHandler(){console.log("Now clicked"); };
(function() {
console.log('Hi!');
})();
<button type="button" id="btn">Click me!</button>
Покажите это своим коллегам и задайте тот же вопрос (почему здесь не работает обработчик кликов?), Если вы хотите сделать их немного ...без ума.)