Skip to content

Instantly share code, notes, and snippets.

@Phantoms
Last active April 10, 2019 22:04
Show Gist options
  • Save Phantoms/ffebae01c31670541641f3bee30d6a96 to your computer and use it in GitHub Desktop.
Save Phantoms/ffebae01c31670541641f3bee30d6a96 to your computer and use it in GitHub Desktop.
// let -- обычная переменная. если обратиться к ней до объявления -- будет ошибка.
console.log(a) // Uncaught ReferenceError: a is not defined
let a = 1
console.log(a) // 1
// const -- такая же переменная, защищенная от полной перезаписи.
const b = 2
b = 3 // Uncaught TypeError: Assignment to constant variable.
// НО! содержимое самой переменной можно изменять, например:
const с = { a: 4 }
c.a = 5 // работает
// или
const d = [1, 2, 3]
d.push(4) // работает
// var -- к переменным, объявленным через вар применяеться т.н. hoisting (подвешивание)
f = () => {
//...
if (true) {
var k = 2;
}
var j = 10;
for (var t of tx) {
//...
}
}
// это тоже самое что и
f = () => {
let k, j, t
//...
if (true) {
k = 2
}
j = 10
for (t of tx) {
//...
}
}
// могут быть нежелательные и неявные последствия
// обращение к var переменной до объявления выдаст нам undefined,
// потому что переменная на самом деле уже объявленна в самом верху через let.
console.log(v) // undefined
var v = 20;
console.log(v) // 20
// таким образом получается что в 99% случаев нам подходит const
// в редких случаях, когда содержимое например цикла мутирует какую-то внешню переменную,
// полностью её перезаписывая -- подходит let.
// а var лучше не использовать вообще :)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment