Объявление переменной с var внутри функции имеет функциональную область видимости. Это означает, что такая переменная доступна во всей функции, игнорируя блочные области видимости (например, внутри if или for).
Последствия:
var в блоке, может перезаписать переменную с таким же именем, объявленную ранее в той же функции, но вне этого блока.var поднимается в начало функции. Это означает, что можно использовать переменную до ее объявления, но ее значение на момент использования будет undefined.for с асинхронными операциями (например, setTimeout), переменная, объявленная с var, будет иметь последнее значение из цикла для всех асинхронных колбэков, а не значение на момент итерации.Пример поднятия и перезаписывания:
javascript
Пример с циклом и асинхронными операциями:
javascript
Из-за этих особенностей, для предотвращения непредвиденных ситуаций, рекомендуется использовать let или const, которые имеют блочную область видимости.