let, const, var: let и const для блочной области видимости, var для функциональной. const для констант, let для переменных, которые могут переназначаться.
Главное отличие — это его способность управлять асинхронными операциями в более читаемом и предсказуемом виде по сравнению с традиционными колбэками, избегая "Callback Hell".
Замыкания позволяют функции "запоминать" и иметь доступ к переменным из окружающей лексической области видимости, даже после того, как эта область видимости завершила выполнение.
Контекст выполнения (или this) в JavaScript определяется в момент вызова функции, а не в момент ее объявления. На его значение влияют следующие факторы: