일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- error
- 문자열 대소문자 구별
- 리액트 네이티브
- img upload
- aws bucket 정책
- firebase 라이브러리
- s3 upload
- GIT
- react native font
- React
- react native 세팅
- Next.js
- Project
- 리액트
- 에러
- PongWorld
- 백준
- 문자열 대소문자
- js
- fire base
- AWS
- Access Key 생성
- 리액트 네이티브 에러
- react native CLI
- 리엑트 네이티브 아이콘
- babel.config.js
- AWS Access Key
- react native 개발
- react native
- react native picker
- Today
- Total
밝을희 클태
[JS / JavaScript] var, let, const 의 차이 본문
일단 차이를 정확하게 이해하기 전에 실행 컨텍스트에 대해서 알아야 한다
실행 컨텍스트는 두가지 주요 단계로 나누어지는데
- 코드 평가 단계
- 코드 실행 단계
이렇게 총 두 단계로 구분된다
코드 평가 단계는 코드를 실행하기 앞서 Lexical Environment 에 변수 및 함수 선언 등이 바인딩되고 스코프에 등록이 된다. 이 단계에서 호이스팅이 발생한다.
코드 실행 단계는 코드 평가 단계에서 준비한 과정을 실행한다. 여기서 필요는 없지만 코드 실행 단계에서 실행 컨텍스트 스택이란게 있는데 코드를 실행하면서 현재 실행되고 있는 함수를 실행 컨텍스트 스택에 PUSH 하고 함수가 종료되면 POP 하는 방식으로 이루어져 있다
var
console.log(x); // undefined
var x = 3;
var 키워드는 코드 평가 단계에서 호이스팅이 돼서
var x;
console.log(x);
x = 3;
위처럼 코드가 평가된다 그리고 변수 선언과 동시에 undefined로 초기화가 된다.
let, const 도 마찬가지로 호이스팅이 진행이 되지만 TDZ(Temporal Dead Zone) 때문에 직접적으로 초기화가 이루어지지 않으면 에러를 발생시킨다.
TDZ는 변수가 선언 되고 초기화 되기 전의 구간을 말한다 이 구간에서는 변수를 접근하려고 하면 ReferenceError 가 발생한다
let, const
console.log(x);
let x = 3;
// console.log(x);
// ^
// ReferenceError: Cannot access 'x' before initialization
그리고 let, const는 블록 스코프를 가지며 var는 함수 스코프나, 전역 스코프에 속하게 된다. 블록 스코프로 테스트를 하면 var는 해당 변수의 값이 나오게 되고 let은 블록 스코프에 속하기 때문에 해당 블록 안에서만 참조를 할 수 있다.
{
var x = 1;
}
{
let y = 1;
}
console.log("x = ", x);
console.log("y = ", y);
// x = 1
// console.log("y = ", y);
// ^
// ReferenceError: y is not defined
이렇게 var는 예측하기 힘든 동작을 하기 때문에 각 키워드에 대해서 잘 알아보고 상황에 따라 적절한 키워드를 사용하도록 하자
'JavaScript' 카테고리의 다른 글
[ JavaScript ] Prototype은 뭘까? (1) | 2024.04.21 |
---|---|
[JS / JavaScript] 전연 객체란 무엇일까? (0) | 2024.03.07 |
[ JavaScript / JS ] WebSocket 연결하고 실시간 채팅 구현하기 (0) | 2024.02.25 |
[ JS / javaScript ] target 과 currentTarget의 차이 (0) | 2024.02.18 |
[ JS / JavaScript ] 좋은 DOM 검색 방법 (1) | 2024.02.16 |