Last active
April 10, 2019 22:04
-
-
Save Phantoms/ffebae01c31670541641f3bee30d6a96 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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