ES6 이후로 버그의 요인이 될 확률이 높은 var는 사실상 쓰지 않는 것이 맞다고 생각한다 .
하지만 이전에 작성된 코드들의 이해와 수정을 위해 var의 특징에 대해 알 필요는 있다.
var, let, const 모두 변수를 선언할 때 사용되는 키워드이다.
var
-
ES6이전에는 변수를 선언하는 유일한 방법
-
이미 선언한 변수명으로 또 변수를 선언해도 에러가 나지 않는다.
-
변수를 선언하기 전에 먼저 변수를 사용해도 에러가 나지 않는다. (hoisting)
-
function level scope(local scope)를 가진다.
*function level scope: 함수 내에서만 유효성을 가지는 범위
let
-
ES6에 새로 등장한 변수 선언 키워드
-
이미 존재하는 변수명으로 또 변수를 선언시 에러가 발생한다.
-
변수를 선언하기 전에 사용하게 되면 에러가 발생한다.
-
block level scope(local scope)를 가진다.
*block level scope: 블록(중괄호로 둘러싸인 부분)내에서 유효성을 가지는 범위
const
-
let과 같이 ES6에 새로 등장한 변수 선언 키워드
-
이미 존재하는 변수명으로 또 변수를 선언시 에러가 발생한다.
-
변수를 선언하기 전에 사용하게 되면 에러가 발생한다.
-
block level scope(local scope)를 가진다.
-
var, let은 변수 선언시 초기 값을 주지 않아도 되지만 const는 반드시 초기값을 할당해 주어야 한다.
-
var, let은 이미 선언한 변수에 다시 값을 할당 할 수 있지만, const는 한 번 할당한 값을 변경할 수 없다.
(단, 객체 안의 property는 변경 가능)
*var, let, const 모두 hoisting은 적용이 되나, var의 3번과 다르게 let, const의 3번에서 에러가 발생하는 이유는
var의 경우 hoisting 되면서 변수에 할당된 값이 없으면 javascript가 자동으로 undefined값을 할당해 주기 때문이다.
*이처럼 let, const에서 변수 선언 후 값이 할당되지 않은 상태를 TDZ(Temporal Dead Zone)라고 한다.
(const의 경우는 선언시 초기값을 할당해 주지 않으면 에러가 발생한다.)
2021/01/20 - [개발/Javascript] - Hoisting
2021/01/21 - [분류 전체보기] - Scope(유효범위)
*참고 : medium.com/@yeon22/javascript-var-let-const%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-9fab5c264c9c
'개발 > Javascript' 카테고리의 다른 글
closure(클로저) (0) | 2021.01.27 |
---|---|
reduce (0) | 2021.01.24 |
Scope(유효범위) (0) | 2021.01.21 |
Hoisting (0) | 2021.01.20 |
charCodeAt, fromCharCode (0) | 2021.01.11 |