Javascript onclick = function — почему такая форма записи?
мы должны писать сначала function () {...}, а не сразу написать тело функции?
Именно так. Таким образом на действие onclick пользователя вы говорите браузеру:"Выполни-ка вот эту функцию". Мне интересно как вы хотите сразу писать тело функции? Если как-то так:a.onclick = {
//do somethiong
}
В таком случае вы скажете браузеру:"Вот когда хомосаппиенс нажмет на кнопку, тогда объект". Не совсем понятно, не так ли?
Если вы хотите тело передавать вот так:a.onclick = //do something
То вы по сути начнете просто перечислять инструкции для браузера. А вы хотите, чтобы эти инструкции были именно для обработчика событий.
Таким образом, чтобы браузер понял, что надо сделать при определенном событии, вы должны передать ему именно функцию, которую он выполнит. Ну конечно можно сделать еще вот так:a.onclick = func;
function func(){
//do somethong
}
Тут по факту вы тоже говорите браузеру, что надо сделать при событии. Тут главное написать вот так:a.onlick = func
А не такa.onlick = func()//Очень плохо, не пишите так
Во втором варианте вы передаете на обработчик уже результат выполненной функции.
И еще лучше использовать addEventListener, Например:a.addEventListener('click',handler)
function handler(){
//do something
}
мы должны писать сначала function () {...}, а не сразу написать тело функции? Знаю, что это связано со внутренним устройством джаваскрипта? Почему работает только так?
Наверно потому что в JS это такая форма записи функции. Изучите такие понятия как "функция", "процедура", "компиляция", "выполнение", "интерпретация". Определение функции - это компиляция кода в некоторый бинарный вид (промежуточный код, байт-код, машинный код и т.п. - в зависимости от реализации в конкретном ЯП) и дальнейшее использование этого кода по адресу начала этого кода / указателю.