키워드 | 순서 |
---|---|
var | 선언 및 초기화 ->할당 |
let | 선언 -> 초기화 -> 할당 |
const | 선언 -> 초기화 -> 할당 |
변수의 선언은 선언, 초기화, 할당 단계를 거친다
변수 선언은 실행 컨텍스트의 변수 객체에 변수를 등록하는 단계로 var
let
const
로 선언을 하게 되는데, 이 때 JS가 견적을 짜는거라고 보면된다.
😎 :자, 너는 변수 a고, 너는 함수고, 너는 b. 또 다른거 있어? 없지? ok!
이 때 호이스팅도 일어나게 된다
선언한 변수를 위한 메모리를 만드는 단계로, undefined로 초기화된다!
할당 연산자(=)를 사용하여 다른 값을 넣는 것이다.
자격증 공부 때문에 잠깐 다른 프로그래밍 언어를 배운 적이 있는데 JS
의 코드는 처음에 읭? 했다. 우선 다른 언어부터 봐보자
int main()
{
printf("%d", a);
int a = 1;
printf("%d", a);
return 0; // error: ‘a’ undeclared
}
print(a);
a = 1;
print(a); // NameError: name 'a' is not defined
두 언어 다 a가 선언되지 않았다는 오류가 나온다.
console.log(a); //undifined
var a = 1; // 할당
console.log(a); //1
console.log(a); //undifined
a = 1; // 할당
var a // 선언
console.log(a); //1
😎 : a? 아까 호이스팅 할 때 선언이랑 초기화도 같이 해놨지. 자! undifined!
var a = 2;
function test(){
var b=1;
}
console.log(b); // b is not defined
함수 안에서 선언한 (지역변수) 변수를 호출을 해서 오류가 난다.
for (var i = 1; i < 5; i++) {
console.log(i); // 1 2 3 4
}
console.log(i); // 5
i는 for문에서 선언이 됐으니 지역변수일텐데.. 작동이 된다..?
=>함수만 지역변수로 호스팅이 되고 그 외에는 전역 변수가 됨!
var a = 1;
console.log(a) //1
var a = 2;
console.log(a) //2
변수명이 중복 선언이 된다!
es6문법으로 JavaScript의 버전 중 하나이다!
var
문제를 해결하기 위해 나온게 let이다.
let도 물론 호이스팅이 되지만 TDZ에 있기 때문에 오류가 난다.
TDZ이란 Temporal Dead Zone의 약자로 일시적 사각지대라는 번역이 된다.
변수가 선언되고 초기화 단계에 접어들기 전까지의 구간을 뜻함!.
let a = 1;
console.log(a) //Identifier 'a' has already been declared
let a = 2;
console.log(a)
식별자 'a'가 이미 선언되었다는 오류가 나옴.
😎: a? 아까 호이스팅 할 때 봐서 알고 있지. 근데 TDZ에 있어서 초기화 하기전엔 접근 못해.
호이스팅 개념이 잘 안 잡혀 추가 공부도 해가면서 이해하려고 노렸했다.
어느 정도 감히는 느낌이다!