Можешь объяснить различия в поведении hoisting и синтаксисе между function declarations, function expressions и arrow functions в JavaScript? — ДейлиПреп