4 ответа
Ребята правы, что `var` - это проблема, но штука с неизменяемостью `const` работает не совсем так - `const` замораживает только ссылку, а не содержимое, поэтому ты спокойно можешь изменять объект или массив, объявленный с `const`. На самом деле всё дело в области видимости: `var` имеет function scope (вытекает за пределы блоков), а `let` и `const` имеют block scope (остаются заперты в области, где были созданы). Это вызывает реальные баги с `var`, например когда ты объявляешь переменную внутри `if` и она вдруг появляется снаружи. Мой совет - используй `const` по умолчанию, `let` когда реально нужно переприсваивать, и забудь о `var` совсем.
Не используй `var` в новом коде, серьёзно. Это старый подход, и он приносит проблемы с областью видимости, которые потом дают головную боль. Главное отличие именно в области видимости: `var` имеет область видимости функции, а `let` и `const` имеют область видимости блока. Это означает, что если ты объявишь переменную с `var` внутри `if`, она будет доступна за пределами блока. С `let` и `const` этого не происходит - переменная остаётся привязана к этому блоку.
Между `let` и `const` отличие простое: `let` можно переприсваивать, `const` нельзя. Если ты объявишь `const minhaVar = 5`, потом не сможешь сделать `minhaVar = 10`. А с `let` это работает спокойно. Звучит как мелочь, но это полезно, потому что предотвращает случайное изменение переменной. Много людей предпочитают использовать `const` по умолчанию и переходят на `let` только когда действительно нужно переприсваивать.
На практике используй `const` всегда, когда можешь, выбирай `let` когда нужно менять значение, и забудь про `var`. Вот собственно и всё. Ещё встречаешь старый код с `var` в изобилии, но для нового кода это не имеет смысла 🤷
Разница в области видимости, о которой упомянули выше, действительно есть, но на практике в повседневной работе главное - это неизменяемость! С `const` ты гарантируешь, что ссылка не изменится, что спасает от глупых багов, когда кто-то (или ты сам спустя время) случайно переприсваивает переменную. `Let` гибче, когда это нужно, но `const` по умолчанию делает код намного более предсказуемым и безопасным.
На практике лайфхак, о котором никто не говорит - использовать `const` по умолчанию и переходить на `let` только когда тебе реально нужно переприсвоить значение - так ты заставляешь свой мозг лучше думать о том, что изменяемо, а что нет, и избегаешь тех противных багов, когда ты меняешь переменную, не заметив этого. `var` практически устарел, и народ в этом прав.
Ваш ответ
Войдите, чтобы ответить.