Можешь объяснить ключевые различия между `var`, `let` и `const` в JavaScript в контексте области видимости, поведения hoisting, переобъявления, переприсваивания и изменяемости? — ДейлиПреп