본문 바로가기
항해99/기술면접

[기술 면접 스터디-2일차] hoisting과 Parameter, argument 차이

by junvely 2023. 7. 20.

1. Hoisting 이란? TDZ란?

호이스팅
- 자바스크립트 엔진이 런타임 이전(코드를 실행하기 전)에 변수와 함수 등의 선언이 해당 스코프의 최상단으로 끌어올려진 것처럼 동작하는 것을 말하며, 정확하게는 변수 식별자와 초기값 undefined를 컨텍스트의 최상단에 등록하는 것을 말한다.

TDZ(일시적 사각지대)
- TDZ는 let과 const 키워드로 사용하여 변수를 선언했을 때 호이스팅 후 실제 변수 선언문을 만나기 전까지 변수를 참조할 수 없는 일시적 사각지대 구간을 의미합니다. 
- TDZ는 ES6(ECMAScript 2015)에서 let과 const키워드가 도입됨에 따라 생겨난 개념입니다.
이전까지 var키워드로 선언된 변수는 호이스팅 되고 변수 선언과 undefined로 초기화가 동시에 진행되어 참조 에러가 발생하지 않지만, let과 const는 변수 선언과 초기화가 분리되어 진행되기 때문에 변수 선언 후 초기화 전까지 TDZ가 발생하게 됩니다.

+ var, let, const 의 호이스팅 차이

var 호이스팅: 변수 선언부만 호이스팅되어 메모리에 할당됩니다. 변수에 값이 할당되기 전에 해당 변수를 사용하면 undefined로 평가됩니다.초기화: 변수 선언과 동시에 초기화되고 메모리 공간이 할당됩니다.

let 호이스팅: 변수 선언부만 호이스팅되어 TDZ(Temporal Dead Zone)에 놓입니다. 선언 이전에 해당 변수를 사용하려고 하면 ReferenceError가 발생합니다.초기화: 변수 선언문에 도달했을 때 실행 컨텍스트에 해당 변수가 등록되고, 변수의 위치를 결정하며, 이후 코드 실행 시에 해당 변수가 사용될 수 있도록 메모리 공간이 할당됩니다.

const 호이스팅: let과 마찬가지로 변수 선언부만 호이스팅되어 TDZ에 놓입니다. 선언 이전에 해당 변수를 사용하려고 하면 ReferenceError가 발생합니다.초기화: let과 동일하게 변수 선언문에 도달했을 때 실행 컨텍스트에 해당 변수가 등록되고, 변수의 위치를 결정하며, 이후 코드 실행 시에 해당 변수가 사용될 수 있도록 메모리 공간이 할당됩니다. 다만, const는 상수로 값을 변경할 수 없기 때문에 선언과 동시에 반드시 초기값을 할당해야 합니다.

 

관련 포스팅

 

[Deep Dive] var, let, const의 차이 / hoisting(호이스팅)에 대해

오늘 목표 : var, let, const의 차이 / hoisting(호이스팅) 모던 자바스크립트 Deep Dive 책을 이용해 변수들과 호이스팅에 대해 공부한 내용을 정리해 보았다. 1. var의 등장 배경 / 문제점 1) 중복 선언 - 같

junvelee.tistory.com

 

2. parameter와 argument의 차이에 대해 설명해주세요.

파라미터(parameter)
함수를 정의할 때 함수의 입력 값을 받아들이는 변수들의 이름을 말하며 함수를 정의할 때 괄호 안에 선언합니다.

아규먼트(argument)
함수를 호출할 때 함수에 전달되는 실제 값들을 의미합니다. 함수를 호출할 때는 파라미터에 대응하는 순서대로 아규먼트를 전달해야 합니다.

 

function add(a, b) { // parameter
  return a + b;
}

const result = add(5, 3); // argument