Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 스레드
- ip
- App Runner
- 웅진씽크빅
- 프로젝트캠프
- 유데미
- 리액트
- 알고리즘
- CS
- React.js
- Algorithm
- 자바스크립트
- 프로세스
- 프로그래머스
- BFS
- IT개발캠프
- 메모리
- 개발자부트캠프
- typescript
- 타입스크립트
- 해시
- 스나이퍼팩토리
- #프로젝트캠프 #프로젝트캠프후기 #유데미 #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #리액트 #react #부트캠프 #리액트캠프
- cs #네트워크
- 인사이드아웃
- react-query
- javascript
- html
- react
- 네트워크
Archives
- Today
- Total
Bin's Blog
let, const 그리고 var 본문
728x90
1. let
- let은 블록 레벨 스코프를 갖는다. 즉 let으로 선언된 변수는 블록 "{}" 내에서만 접근 할 수 있다.
- let으로 선언된 변수는 호이스팅이 발생하지만 변수가 선언되기 전에 접근하려고 하면 ReferenceError가 뜨게 된다. 이를 임시적 사각 지대(Temporal Dead Zone, TDZ)라고 부른다. (변수 선언과 초기화가 분리되어 있다.)
- let으로 선언된 변수는 재할당이 가능하지만, 재선언은 불가능하다.
- 예시 코드
console.log(name); // ReferenceError: name is not defined
{
console.log(name); // ReferenceError: Cannot access 'name' before initialization
let name = "John";
console.log(name); // 출력: John
}
console.log(name); // ReferenceError: name is not defined
- 위의 코드처럼 name 변수는 블록 스코프를 가지므로 선언된 블록 "{}" 내에서만 접근할 수 있다. name 변수가 선언되기 전에 접근하려고 하면 ReferenceError: Cannot access 'name' before initialization 이런 오류가 발생하는데 바로 임시적 사각 지대에 해당합니다. name이라는 변수가 호이스팅되어 메모리에 할당되었지만, 초기화되지 않은 상태이다.
- 위와 같이 let을 쓰면 변수 사용에 엄격한 제약을 부여해서 실수를 줄일 수 있게 도와준다.
- 호이스팅은 다음 글에서 다루겠다!
2. Const
- const도 블록 레벨 스코프를 갖는다. let과 동일하게 선언된 블록"{}" 내에서만 접근할 수 있다.
- const로 선언된 변수도 호이스팅이 발생하지만, let과 마찬가지로 변수가 선언되기 전에 접근하려고 하면 ReferrenceError가 발생한다. 임시적 사각 지대(TDZ)가 let처럼 존재한다.
- const로 선언된 변수는 재할당 및 재선언이 불가능하다. 따라서 선언과 동시에 초기화가 필요하며, 변하지 않는 상수 값을 저장할 때 사용된다.
- 예시 코드
console.log(age); // ReferenceError: Cannot access 'age' before initialization
const age = 30;
console.log(age); // 출력: 30
3. Var
- Var는 let, const와 다르게 함수 레벨 스코프를 갖는다. 즉, var로 선언된 변수는 함수내에서 어디서든 접근할 수 있다. 함수 외부에서 선언된 경우 전역변수가 된다.
- Var로 선언된 변수는 호이스팅이 발생한다. 변수 선언이 함수의 맨 위로 올라가지만 값 할당은 원래 위치에서 이루어진다. 따라서 선언 전에 변수에 접근하면 undefined 값을 얻게 된다. (변수 선언과 초기화가 동시에 이루어진다.)
- let, const와 다르게 변수에 메모리 공간을 할당하고 기본값을 undefined로 설정한다.
- var로 선언된 변수는 재할당 및 재선언이 가능하다.
console.log(greeting); // 출력: undefined
var greeting = "Hello, World!";
console.log(greeting); // 출력: Hello, World!
4. 왜 요즘 자바스크립트에서 var를 쓰지 않을까?
- ES6(ECMAScript 2015)에서 도입된 let과 const가 var보다 더 나은 스코프 및 호이스팅 관리를 제공하기 때문이다.
- let과 const를 사용하면 코드의 가독성이 높아지고, 예기치 않은 버그를 방지할 수 있다.
- var의 문제점
- 함수 레벨 스코프: var로 선언된 변수는 함수 레벨 스코프를 가지기 때문에, 블록 내에서만 유효한 변수를 만들기 어렵다. 이로 인해 변수가 예상치 못한 범위에서 접근되거나 수정될 가능성이 높다.
- 호이스팅: var로 선언된 변수는 호이스팅되어 변수 선언이 함수의 맨 위로 올라가게 된다. 이 때문에 변수가 선언되기 전에 사용되면 undefined 값을 반한화게 되어, 의도치 않은 결과를 초래한다.
- 재선언 허용: var로 선언된 변수는 같은 스코프 내에서 재선언이 가능하다. 이는 실수로 동일한 이름의 변수를 여러 번 선언하는 경우 덮어쓰여서 버그를 발생할 수 있다.
728x90
'JavaScript' 카테고리의 다른 글
호이스팅 (0) | 2023.05.11 |
---|---|
JSON (0) | 2023.05.09 |
실행 컨텍스트 (0) | 2023.05.08 |
undefined와 null (0) | 2023.05.05 |
Map() 객체 (0) | 2023.05.04 |