변수와 변수명
변수 == variable
하나의 값을 저장 하기 위해 확보된 메모리 공간 자체 / 변할 수 있는 데이터
변수명
메모리 공간을 식별 하기 위한 식별자
변수 선언 / 할당 / 초기화
변수 선언
변수를 정의 하는 것을 의미 한다.
var, let, const 키워드를 사용 한다.
변수 할당
변수가 선언된 후 대입 연산자 (=) 를 통해 값을 넣어 주는 것을 의미 한다.
변수 초기화
변수를 선언함과 동시에 값을 넣어 주는 것을 의미 한다.
호이스팅 (Hoisting)
호이스팅
변수 선언 및 함수 선언이 된 변수 또는 함수에 대해,
코드가 이동 되지는 않지만,
코드가 최상위로 끌어 올려진 것 처럼 동작하는 현상을 말한다.
주의할점
선언이 끌어 올려지는 것 처럼 동작하는것 뿐이지,
할당이 끌어 올려지는 것이 아니다.
let 과 const 변수도 호이스팅이 가능 하지만,
일시적인 사각지대 == Temporal Dead Zone 에 빠지기 때문에,
변수 할당이 되기 전까지는 사용이 불가능 하다.
그래서 호이스팅이 되지 않는 것 처럼 보이지만,
호이스팅이 가능하지만,
TDZ 때문에 안되는 것 처럼 보이는 것 뿐이다.
스코프 (Scope)
식별자 (변수명, 함수명, 클래스명, .. 등) 의 유효 범위를 의미 한다.
전역 스코프 에서 사용 가능한 변수 == 전역 변수
지역 스코프에서 사용 가능한 변수 == 지역 변수
특정 코드 블록에서 사용 되는 변수 == 지역 변수 == 블록 레벨 스코프
다만,
var 키워드로 선언된 변수는,
함수의 코드 블록만들 지역 스코프로 인정 하는 예외를 갖게되서,
var 키워드로 선언된 변수만,
함수 레벨 스코프 라고 한다.
if 문, for 문, try-catch 문, .. 등에서 사용된 var 변수는,
함수 블록 내부에 아니므로,
지역 스코프가 아니라, 전역 변수로 취급 된다.
var : 함수 스코프 (function-scoped)
let & const : 블록 스코프 (block-scoped)
var / let / const
변수 | 중복 선언 | 재 할당 | 호이스팅 | 스코프 | 생성 과정 |
var | 가능 | 가능 | 가능 | 함수 스코프 | 1. 선언 및 초기화 단계 2. 할당 단계 |
let | 불가능 | 가능 | 가능 | 블록 스코프 | 1. 선언 단계 2. 초기화 단계 3. 할당 단계 |
const | 불가능 | 불가능 | 가능 | 블록 스코프 | 1. 선언 + 초기화 + 할당 단계 |
따라서, var 변수는
1.
중복 선언으로 인해 예기치 못한 값의 반환 될 수 있다.
2.
함수가 아닌 다른 블록 스코프 에서 선언된 변수는,
모두 전역 변수로 취급 되어 예기치 못한 할당이 될 수 있다.
3.
선언 전에 변수를 참조 하면 undefined 가 될 수 있다.
위와 같이 3가지 문제가 발생 할 수 있으므로,
var 변수를 사용 하는 것을 지양하고,
let & const 변수를 사용 하는 것을 지향 해야 한다.
만약, 상수를 사용 해야 한다면, const 변수를 사용 하면 된다.
'자바스크립트 (JavaScript) > 이론' 카테고리의 다른 글
[ JS 데이터 ] 참조형 - Array (0) | 2023.10.30 |
---|---|
[ JS 데이터 ] 원시형 - Boolean, null, undefined (0) | 2023.10.30 |
[ JS 데이터 ] 원시형 - String, Number (1) | 2023.10.29 |
생성자 함수 개념 (0) | 2023.08.27 |
변수, 호이스팅, TDZ (Temporal Dead Zone) 개념 (0) | 2023.08.20 |