[ javascript ] 호이스팅

한대희·2022년 11월 9일
0

JavaScript

목록 보기
9/23

호이스팅의 개념

코드가 처음부터 끝까지 실행이 되기 전에 자바스크립트 엔진이 선언해둔 변수가 뭐가 있는지 먼저 조사해서 선언된 변수와 함수를 메모리에 기억을 해둔다. 즉 호이스팅 이라는 것은 스코프 내부 어디서든 변수 선언이 최상위에 된 것처럼 한다는 것이다.

전역변수 - 블락 밖에서 선언을 한 변수를 의미하고 어디서든 사용될 수 있는 변수다.

지역변수 - 블락 ({})안에서 선언된 변수를 의미하고 블락 안에서만 사용이 가능하다.

변수의 초기화 = 변수를 선언함과 동시에 값을 넣어 주는 것

변수는 3단계를 거친다 선언, 초기화 ,할당
var는 선언과 초기화가 동시에 이루어진다.
let은 선언,초기화,할당이 따로따로 이루어진다.
const는 선언과 할당이 동시에 이루어 져야 한다. const로 변수를 먼저 선언하고 나중에 할당하면 오류가 발생한다.

var의 경우 선언과 초기화가 동시에 이루어지면서 호이스팅이 되지만 할당은 호이스팅이 되지 않기 때문에 선언전에 console.log를 찍으면 에러가 아닌 undefined가 나온다.

let의 경우는 undefined가 아닌 error를 일으키는데 그 이유는 tdz때문이다.let도 호이스팅이 일어나지만 만약 변수가 tdz에 속해 있는, 즉 선언되기 전에 변수를 사용한 부분이 있다면 그 부분은 tdz이기 때문에 에러를 일으키게 된다.

console.log(name) // name이라는 변수가 선언되기 전인 이 부분이 TDZ이다.TDZ에 속해 있는 변수는 할당하기 전에는 사용할 수 없다.

const name = 'JS';
console.log(name);

let이 코드블럭 안에서 사용되는 경우도 살펴보자

function person() {
    console.log(age); // 이 부분이 tdz이다. 호이스팅은 스코프 단위로 일어나기 때문에 
    let age = 20;
}

var와 let은 큰 차이가 있다. var는 함수안에서 선언 된 경우를 제외하고는 모두 전역변수로 저장이 되지만 let은 함수 안에서 선언되면 그 함수 에서만 사용할 수 있는 지역변수, 코드블럭 안에서 사용해도 그 블럭 안에서만 사용할 수 있는 지역변수로 저장이 된다.

let은 temporal death zone(tdz)라는 개념이 있다.

profile
개발 블로그

0개의 댓글

관련 채용 정보