JavaScript 변수
var, let, const
var
- var는 한번 선언된 변수를 다시 선언할 수 있다.
var fruit = '사과';
console.log(fruit);
var fruit = '오렌지;
console.log(fruit);
- var는 선언하기 전에 사용 가능 (호이스팅)
console.log(say);
var say = 'hi';
var say;
console.log(say);
var say = 'hi';
- 호이스팅: 스코프 내부 어디서든 변수 선언은 최상위에 선언된 것 처럼 행동
Temporal Dead Zone
- 일종의 사각지대로, 선언 전에 변수에 접근하는 것을 금지한다.
- let과 const도 호이스팅이 되지만 TDZ의 영향을 받음
- 코드를 예측가능하게 하고, 잠재적인 버그를 줄일 수 있음
let
let height = 170;
function showHeight() {
console.log(height);
let height = 165;
}
변수의 생성과정
- 선언
-> 변수 객체에 등록하는 단계. 변수 객체는 스코프의 참조 대상이 됨
- 초기화
-> 변수 객체에 선언 단계의 변수를 위한 메모리를 만드는 단계. undefined로 초기화됨
- 할당
-> undefined로 초기화된 메모리의 다른 값을 할당하는 단계
var의 생성과정
- 선언 및 초기화 단계
- 할당 단계
let의 생성과정
- 선언 단계
- 초기화 단계
- 할당 단계
const의 생성과정
- 선언 + 초기화 + 할당
const weight;
weight = 67;
스코프
var는 함수 스코프(function-scoped)
const age = 25;
if(age>19) {
var text = '성인';
}
console.log(text);
function squared(n1) {
var result = n1*n1;
}
squared(5);
console.log(result);
let, const는 블록 스코프( block-scoped)
- 블록이 생성될 때 스코프 발생
- 함수, if문, for문, while문, try/catch문 등
const age = 25;
if(age>19) {
let text = '성인';
}
console.log(text);