티스토리 뷰
JavaScript let, const 란? 그리고 왜 써야만 하는가? (ES6)
Yolo진우 2019. 2. 19. 22:31
ES6 이전에는 변수를 선언하는 방법은 var 를 이용하는 방법 밖에 없었습니다. 하지만 var 에 대한 여러가지 문제들로 인해 고통을 너무 많이 받았습니다.
그 동안 고통받았던 문제들에 대해 이야기 나눠보고 시작해야겠죠 ?
var 의 문제점들에 대해서 이야기 해보겠습니다.
1. var 로 변수 선언 시 var 키워드 생략 가능
2. var 로 변수 선언 후 중복 선언 가능
3. 변수가 선언도 되지 않았는데 참조 가능 (변수 호이스팅)
변수 호이스팅은 매우 중요한 내용이므로 자세히 설명하고 넘어가겠습니다.
* 변수 호이스팅이란 ?
변수가 생성되면 선언 -> 초기화 -> 할당 이 3단계에 걸쳐 생성되는데 풀어서 설명하면 Scope에 변수를 등록 후 변수를 위한 공간을 확보한 후 (선언), 변수를 undefined로 초기화를 한다. 그래서 위의 예제에서도 첫 번째 console.log에 당연히 에러가 날 것 같은데 에러가 안나고 undifined가 찍힌 것이다. 그리고 난 후 이제 할당문에 도달하여 값이 할당이 되었을 때 값이 정상적으로 출력되는 것을 볼 수있다. 이러한 현상을 변수 호이스팅이라고 한다.
여기서 var의 문제점은 변수 선언 시 선언 -> 초기화 가 동시에 이루어지기에 변수 호이스팅으로 인한 문제가 발생하는 것이다.
4. function-level-scope
var는 함수 코드 블록 ({})만 Scope로 인정하기 때문에 함수 외부에서 선언된 모든 변수는 전역 변수다.
이 모든 걸 해결하고자 ES6에서 let, const가 나왔습니다.
이제 let, const에 대해서 알아봅시다. 둘의 공통점을 정리해보았다.
1. block-level-scope
var 에서는 function-level-scope 라서 전역 변수가 남발할 수 있는 사태가 발생했습니다. 하지만 let, const 는 block-level-scope 라서 전역 변수 남발하는 사태를 줄일 수 있습니다.
2. 변수 중복 선언 불가
var 에서는 변수를 위에 선언 후 다시 아래에서 재 선언이 가능했습니다. 하지만 let, const 는 재 선언 시 문법 에러가 뜹니다.
3. 호이스팅 불가
위에서 설명했듯이 var로 변수 생성 시 선언과 초기화가 동시에 이루어 지기 때문에 호이스팅 현상이 나타났습니다. 하지만 let, const 는 변수 생성 시 선언과 초기화가 분리되어서 진행이 된다. let, const는 변수를 생성하고 선언까지 한 후 일시적 사각지대(TDZ) 가 선언과 초기화 사이에 생기며, 할당문에서 변수 값이 할당 될 때 초기화 및 값 할당이 이루어진다.
이제 둘의 차이점에 대해 알아보자.
let으로 변수 선언 후 값을 재할당 가능하지만, const로 선언 후 값을 재할당 할 수 없다. 간단하게 정리하면 값을 재할당 할 것 같으면 let을 사용하고 변하지 않는 값에는 const(상수)를 사용하면 된다.
지금까지 let과 const에 대해 알아보았다.
마지막으로 정리해보면
- ES6를 사용 가능하다면 var 대신 let, const를 사용하자.
- 값을 재할당 한다면 let, 재할당을 안한다면 const.
긴글 읽어주셔서 감사합니다.
오늘도 행복한 코딩하세요 !
'넌 누구야 JavaScript 공부 > JavaScript' 카테고리의 다른 글
JavaScript Rest parametor, Spread (ES6) (0) | 2019.02.25 |
---|---|
JavaScript 프로토타입 기반의 함수 Class (ES6) (0) | 2019.02.22 |
JavaScript 새로운 문자열 표기법 template literals (ES6) (0) | 2019.02.21 |
JavaScript arrow function 비밀을 파헤쳐보자 (ES6) (0) | 2019.02.20 |
JavaScript 배열 안에 특정한 값을 찾을 때 사용하기 좋은 find 메소드 (ES6) (0) | 2019.02.16 |
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- github
- 웹사이트
- 클래스 컴포넌트
- const
- TypeScript
- Let
- Function Component
- react
- array
- ES6
- Prototype
- class component
- 가상돔
- 리엑트
- useEffect
- 클래스형 컴포넌트
- virtual dom
- string
- Es5
- this
- 깃헙
- scope
- website
- window
- Angular
- useState
- JavaScript
- 함수 컴포넌트
- HTML
- NestJS
- Total
- Today
- Yesterday