이번엔 변수에 대한 추가 정리를 할것이다.
1. Hoisting, TDZ
Hoisting
console.log(name); --- "Mike" 출력
var name = "Mike";
console.log(age); --- TDZ
const age = 30; --- 선언 및 할당
console.log(age); --- 30 출력
이와 같이 변수를 선언하고 할당하기 전까지는 사용할 수 없는것이 TDZ의 영향을 받는것이다.2. 변수란?
자바스크립트에서 변수는 쉽게 말해서 데이터를 담아두는 공간이라고 할 수 있다.
변수를 사용하기 위해서는 변수를 선언한 후에 값을 저장해주면 된다.
변수를 선언은 var , let, const를 사용해서 한다.
var name = "Tom";
console.log(name); --- "Tom" 출력
var name = "Mike"; = 재선언
console.log(name); --- "Mike" 출력
name = "Jake"; = 재할당
console.log(name); --- "Jake" 출력
let age = 30;
console.log(age); --- 30 출력
let age = 10; = 재선언
console.log(age); --- 오류발생
age = 10; = 재할당
console.log(age); --- 10 출력
const PI = 3.14;
console.log(PI); --- 3.14 출력
const PI = 3.1415;
console.log(PI); --- 오류발생
PI = 3.1415;
console.log(PI); --- 오류발생
3. 변수 생성 과정
변수 선언 -> 변수 초기화 -> 변수에 값 할당
의 순서를 거치는데 var, let, const의 과정이 각각 다르다.const gender;
gender = "female";
console.log(gender); --- 오류발생
const gender = "female";
console.log(gender); --- "female" 출력
4. 스코프
function plus(num1, num2) {
var answer = num1 + num2;
}
plus(1, 2); --- 3
console.log(answer); --- 오류발생
하지만 함수를 제외한 다른 블록에서 선언한 var는 블록 외부에서 호출할 수 있다.const PI = 3.14;
if (PI > 0) {
var result = "true";
}
console.log(result); --- "true" 출력
-let, const : 블록 스코프 (block-scoped)function plus(1, 2){
const result = "false";
}
console.log(result); --- 오류발생
if(1 > 2){
let ans = "false";
}
console.log(ans); --- 오류발생
for(let i = 0; i < 10; i++) {
const answer = "false:;
}
console.log(answer); --- 오류발생
즉, 함수스코프는 함수 외의 다른 블록에는 아무런 영향을 받지 않는다.