[TIL] 변수와 호이스팅

최하온·2024년 1월 5일
0

TIL

목록 보기
14/71
post-thumbnail

각 변수 선언 특징

키워드순서
var선언 및 초기화 ->할당
let선언 -> 초기화 -> 할당
const선언 -> 초기화 -> 할당

변수의 선언은 선언, 초기화, 할당 단계를 거친다

선언

변수 선언은 실행 컨텍스트의 변수 객체에 변수를 등록하는 단계로 var let const 로 선언을 하게 되는데, 이 때 JS가 견적을 짜는거라고 보면된다.
😎 :자, 너는 변수 a고, 너는 함수고, 너는 b. 또 다른거 있어? 없지? ok!
이 때 호이스팅도 일어나게 된다

초기화

선언한 변수를 위한 메모리를 만드는 단계로, undefined로 초기화된다!

할당

할당 연산자(=)를 사용하여 다른 값을 넣는 것이다.

자격증 공부 때문에 잠깐 다른 프로그래밍 언어를 배운 적이 있는데 JS의 코드는 처음에 읭? 했다. 우선 다른 언어부터 봐보자

c

int main()
{
    printf("%d", a);
    int a = 1;
    printf("%d", a);		
    return 0;		// error: ‘a’ undeclared
}

python

print(a);
a = 1;
print(a);		// NameError: name 'a' is not defined

두 언어 다 a가 선언되지 않았다는 오류가 나온다.

javascript

var의 문제점 1

  1. 호이스팅 때 선언+초기화를 진행해 호출을 해도 정상 작동함.
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의 문제점 2

  1. 전역 변수와 지역 변수의 경계도 모호해!
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

변수명이 중복 선언이 된다!

How solve issue


let

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에 있어서 초기화 하기전엔 접근 못해.

Realization

호이스팅 개념이 잘 안 잡혀 추가 공부도 해가면서 이해하려고 노렸했다.
어느 정도 감히는 느낌이다!

0개의 댓글