취미처럼

[Javascript] var, let, const 본문

JavaScript/이론

[Javascript] var, let, const

sirius 2021. 3. 16. 10:44

1. var(Fuction-Scope)

es2015 전까지 변수를 선언하던 방식

 

for(var i=0; i < 10; i++) {
    console.log("i -> " + i);
}

console.log("for out i -> " + i);

다른 언어에서는 함수 바깥에서 i를 호출했기 때문에 오류가 발생하지만,

Javascript에서는 for문 안에서 선언된 변수 i가 호이스팅 되었기 때문에 결과가 출력됨

 

var test = 'test1';
var test = 'test2';
console.log(test);

test2 = 'test3';
var test2;
console.log(test2);

문제점

  • 1. 중복된 변수를 선언해도 문제가 발생하지 않음
  • 2. 초기화 한 후에 변수를 선언해도 호이스팅 때문에 정상적으로 프로그램이 동작함
  • 3. 초기화와 선언이 순서가 바뀌더라도 정상적으로 동작

 

2. let, const(Block-Scoped)

var의 문제점을 해결하기 위해 es2015에 추가

 

for(let i=0; i < 10; i++) {
    console.log("i -> " + i);
}
console.log("for out i -> " + i); // i is not defined 발생

let test = 'test1';
test = 'test11'   // 새로 초기화 가능
let test = 'test2';// 새로 선언하는 것은 에러 발생

 

let과 const는 변수 재선언을 할 수 없음

let은 변수에 재할당이 가능하지만, const는 변수를 재선언할 수 없고, 재할당 할 수 없음

 

const test1 = 'const';
test1 = 'const1'; //Assignment to constant variable 발생
const test2; //Missing initializer in const declaration

let과 const가 호이스팅이 발생하지 하지 않는 것은 아니지만

var는  Function-Scope로 호이스팅이 발생했다면

let, const는 Block-Scope로 호이스팅이 발생

'JavaScript > 이론' 카테고리의 다른 글

[Javascript] 정렬  (0) 2021.03.16
[Javascript] Scope, Hoisting  (0) 2021.03.16
[Javascript] 형변환  (0) 2021.03.16
[Javascript] Cookie  (0) 2021.03.16
[Javascript] 예외처리  (0) 2021.03.16
Comments