
기본적으로 const을 쓰고 필요할 때만 let을 쓰되, var은 쓰지 말것.
항상 const
가끔 let
절대 var
둘 다 변수를 선언할 때 사용한다.
const를 쓰면 변수 값을 바꿀 수 없고, let을 쓰면 변수 값을 바꿀 수 있다. 변수 값을 업데이트 해야할 때 let을 쓴다. 업데이트 할 때는 let을 재작성 하지 않아도 된다.
const a= 5;
let isGataFat = true;
isGataFat = false;
console.log(isGataFat); //false
// const로 variable(변수) 만들기
const myName = "Gata";
console.log("hello " + myName);
myName = "gatinha"; //const로 변수 선언 했기 때문에 에러난다.
console.log("My new name is " + myName);
<콘솔 결과창>
const를 쓰면 변수 값이 절대 바뀌어서는 안되기 때문에 콘솔창에서 에러 났다고 알려준다.

변수 값을 바꾸고 싶으면 const 대신 let을 쓴다.
let은 선언을 한번만 하면 된다. (재선언 금지)
같은 변수명에 대고 let을 두번 쓰지 않는다.
// let으로 variable 선언하기
let myName = "Gata";
console.log("hello " + myName);
myName = "gatinha";
console.log("My new name is " + myName);
<콘솔 결과창>
에러 안남. myName의 변수 값이 'gatinha'로 바뀜

const와 let을 구분해서 씀으로써 아래 코드만 봐도 작성자의 의도를 알 수 있다. a,b의 값은 절대 안 바뀔거고, myName은 나중에 값이 업데이트 될 것임을 의미한다.
const a = 5;
const b = 2;
let myName = "Gata";
아래 코드에서는 const나 let 둘 중에 무엇으로 a, b, myName가 변수 선언 되었는지 중요하지 않다. 모든 변수 값이 수정되지 않았기 때문. 수정하려면 무조건 let으로 변수 선언 해줘야한다.
//이 코드에서는 let이나 const나 상관없음.
const a = 5;
const b = 2;
const myName = "Gata";
//let a = 5;
//let b = 2;
//let myName = "Gata";
console.log(a + b);
console.log(a * b);
console.log(a / b);
console.log("hello " + myName);
하지만 아래 코드에서는 myName을 변수 선언할 때 let을 사용해야 한다.
const a = 5;
const b = 2;
// const myName = "Gata"; 불가능
let myName = "Gata"
console.log(a + b);
console.log(a * b);
console.log(a / b);
console.log("hello " + myName);
myName = "gatinha";
console.log("My new name is " + myName);
다른 사람들의 코드와 대부분의 프로그래머가 하는 것을 봤을 때, const를 기본으로 사용한다. variable을 업데이트 하고 싶다면 때에 따라서 let을 쓰는 방식으로 코딩한다. 모든 변수를 업데이트 해야하는 경우는 잘 없기 때문.
JavaScript는 약간 프랑켄슈타인 같아서 처음부터 다 갈아 엎을 수 없고 오래되고 낡은 코드 위에 새롭고 트랜디한 코드를 쌓아가는 언어다. 다시 말해 오래된 코드(예를 들어, var)들을 없앨 수 없다.
(참고. JavaScript는 개발자가 10일만에 개발한 언어이기 때문에 새로운 기능이 꾸준히 추가되어 오늘날의 JS가 되었다.)
오래된 코드 중 하나인 var는 오래 전의 JS에 있던 변수 선언 방식이다. var의 문제는 명확한 rule이 없다는 것이다. 나중에 변수값이 수정 될 것인지(let), 변수 값이 바뀌지 않을 것인지(const) 알 수 없어서 언어에 대한 보호(어느 부분에서 에러가 났는지)를 받지 못한다.
다시 말해 var은 변수를 선언할 수 있지만 let, const 처럼 의미를 구분할 수 없다.
var a = 5;
var b = 2;
var myName = "Gata"