camelCase
: 대소문자로 구분 ex)myName → 더 많이 사용하는 방법snake_case
: 언더바로 구분 ex)my_namevar
: 전통적인 변수 선언 방법으로, 여러가지 문제점이 있어 후에 let
이라는 새로운 변수선언 방식이 등장하게 된다.
var a = 1
console.log(a)
var a = 2
console.log(a)
//변수의 이름은 절대 중복이 되면 안되는데 var를 사용하여 선언할 경우 중복이 된다.
console.log(a) // undefinded 출력. 선언은 호이스팅되지만 할당은 호이스팅되지 않기 때문.
/*원래대로라면 에러가 나야 하지만 호이스팅시 변수의 선언과 초기화(undefined)로 같이 시켜버림.
*/
var a = 1
console.log(a) // 1 출력. 문제 없음
for(var i = 1; i<5; i++ {
console.log(i)
} // 문제 없이 1, 2, 3, 4 출력
console.log(i) // 원래대로라면 에러가 나야하지만 5가 출력. var가 함수 스코프라 i를 전역변수로 올렸기 때문.
let
var의 문제점을 보완하기 위해 나온 변수 선언 방식.
블록 스코프(block-scoped)
함수의 선언과 초기화가 분리되어 일어남.
TDZ(Temporal Death Zone)의 영향을 받음. → 선언 및 할당 전에는 사용 불가.
console.log(name) // TDZ의 영역 안에 있기 때문에 사용 불가
let name = "Dumibell" // 함수 선언 및 할당
console.log(name) // 사용 가능
const
console.log(10000*0.1);
// 결과값인 1000은 출력이 되겠지만 숫자 10000과 0.1이 무엇을 의미하는지 알 수 없다.
let 가격 = 10000; // 가격은 변할 수도 있으니 let을 사용
const 부가가치세율 = 0.1; // 만약 부가가치세율은 무조건 0.1로 고정이고 실수로라도 변경이 되면 안될 경우에 재할당이 불가능한 const를 사용하면 좋다.
let 부가가치세 = 가격 * 부가가치세율
//변수를 선언함으로써 의미가 보다 명확해진다.