자바스크립트 - 호이스팅과 실행 컨텍스트

Moon·2023년 6월 15일
0
post-thumbnail
post-custom-banner

변수 : 프로그래밍 언어에서 데이터를 관리하기 위한 핵심 개념


'10 + 20' 을 컴퓨터에게 시켜보자.

먼저, 자바스크립트 엔진도 사람처럼 자바스크립트 코드를 실행한다.

  1. 계산 (10, 20, + 라는 기호의 의미를 알아야한다)
  2. 10+20 이라는 식의 의미도 해석할 수 있어야한다.
  3. 식의 의미를 해석하면 피연산자를 기억한다.
  4. 사람은 두뇌에서 연산과 기억을 처리하지만, 컴퓨터는 CPU(연산), 메모리(기억)를 사용한다

연산 결과를 한 번만 사용한다면 문제가 없겠지만, 연산 결과 30을 재사용하고 싶다면 메모리 주소를 통해 연산 결과 30이 저장된 메모리 공간에 직접 접근하는 것 외에 방법이 없다.

하지만, 보안 상 개발자의 직접적인 메모리 제어를 허용하지 않는다.
(만약, 직접 메모리 제어를 허용하더라도 값이 저장될 메모리 주소는 코드가 실행될 때마다 변경된다)

프로그래밍 언어는 기억하고 싶은 값을 메모리에 저장하고, 저장된 값을 읽어들여 재사용하기 위해 변수라는 매커니즘을 제공한다.

즉, 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름이다. (쉽게 말해, 값의 위치를 가리키는 존재)


자바스크립트를 처음 공부할 때는 '선언(declaration)'과 '할당(assignment)'의 개념을 혼용해서 사용하고 있었다. 둘이 똑같은 건 줄 알았다. 그러다보니 다음과 같은 코드를 마주칠 때 문제가 발생했다.

console.log(score);
var score = 80;

착각) 호이스팅되어 score는 80이 출력될 것이다.
실제) undefined가 출력

  • 호이스팅(hoisting) : 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징

이전까지 호이스팅의 개념을 '선언'을 해주면 값이 할당된다고 생각했지만 그게 아니었다!!

먼저, undefined가 출력되는 이유는 변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만, 변수 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행되기 때문이다.

profile
안녕하세요. Moon입니다!
post-custom-banner

0개의 댓글