반응형
const : 변할 수 없는 상수
let : 블록 스코프의 범위를 가지는 지역 변수
var: es5 와 이전의 변수 → 블록 스코프라는 개념이 없다. 호이스팅이 될 때 함수만 지역변수, 나머지는 전역변수로 인식을 한다.
호이스팅
코드가 실행되기 전 선언된 변수들을 최상단으로 끌어올린다.
예를 들어 코드가 실행이 되고 A라는 변수를 호출 하면 최상단에 올라가 있는 변수를 가져온다.
호이스팅에 대한 예시
console.log(a); // undefine
var a = 1;
console.log(a); // 1
위 코드가 실행을 해도 에러가 발생하지 않는 이유는 호이스팅때문이다.
코드가 실행되기 전에 a값이 있는 것을 엔진이 알고 있기 때문이다
console.log(a)
a=1
var a
console.log(a)
---
for(var i=0; i<5; i++){
console.log(i);
}
console.log(i);
---
var a = 1;
console.log(a);
var a = 2;
console.log(a);
전역변수
블락 밖에서 선언을 한 어디서든 쓰일 수 있는 변수
지역변수
블락 {}안에서 선언된 변수, 블락안에서만 쓸 수 있음
var를 사용시에 에러가 나지 않는 이유는 var 의 경우에는 함수만 지역변수로 되고, 나머지는 다 전역변수로 올려버린다.
엔진 자체는 a라는 변수가 호이스팅으로 기억이 되어있어, 에러가 발생하지 않는다.
var의 이런 문제로 만들어진 것이 let이다.
console.log(a); // undefine
var a = 1;
console.log(a); // 1
let도 호이스팅이 되고, temporal death zone(TDZ) 개념이 적용된다.
a 변수가 호이스팅으로 기억이 된 것으로 확인을 했지만, a선언문이 나올때 까지이 되기 전에 접근을 할 수 없다.
그때까지는 접근할 수 없는 death zone
반응형
'dev > fe' 카테고리의 다른 글
another-multi-provider 사용시 타입에러 (0) | 2023.04.30 |
---|---|
NextJS에서 로그인 유지하기 (0) | 2023.04.26 |
nextJS svg 불러오기가 안될 때 (0) | 2023.04.26 |
use-hook-form 예시 만들어 놓기 (0) | 2023.04.25 |
nextJS, React에서 폰트가 뿌옇게 나오네? (0) | 2023.04.23 |
댓글