모던 자바스크립트(ch4. 변수 ~ ch5. 표현식과 문)

김도형·2022년 9월 22일
post-thumbnail

4장 변수

변수란?

  • 하나의 값을 저장하기 위해 확보한 메모리 공간 자체
  • 메모리 공간을 식별하기 위해 붙인 이름

식별자 = 이름[클래스 이름, 변수 이름...]

  • 자바와 동일하게 식별자는 어떤 값을 구별해서 식별할 수 있는 고유 이름
  • 값이 아니라 메모리 주소 기억함.

변수 선언

  • 변수 생성
  • 값을 저장하기 위한 메모리 공간을 확보
  • 변수 선언할 때 var, let, const 키워드 사용

    ES 5 -> var
    ES 6 -> let, const

키워드

var, let, const와 같은 키워드는 자바스크트 코드를 해석하고 실행하는 자바스크립트 엔진이 수행할 동작을 규정한 일종의 명령어

undefined

  • 자바스크립트에서 제공하는 원시 타입의 값

변수 선언 2단계

  • 선언 단계 : 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재 알림
  • 초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화

var 키워드 변수 선언 단계

  • 선언 + 초기화 단계 동시 진행
  • var 키워드는 암묵적으로 초기화 수행하여 쓰레기값에 대한 위험으로부터 안전

변수 선언의 실행 시점과 변수 호이스팅

  • 어디에 있든 변수 선언 + 모든 선언문(변수 선언문, 함수 선언문 등을) 가장 먼저 실행, 이를 [소스코드 평가 과정]라고 함.
  • 소스코드 평가 과정이 끝나면 나머지 소스코드를 한 줄씩 순차적으로 실행
  • 변수 호이스팅 : 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트의 특징
console.log(score); // undefined(2)

var score; // 변수 선언문(1)

값의 할당

  • 값의 할당 또한 변수 호이스팅처럼 런타임 이전에 변수 선언이 우선 실행되고 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행된다.
  • 변수 선언과 값의 할당을 하나의 문으로 작성해도 변순 선언과 값의 할당을 2개의 문으로 나누어 각각 실행
var score = 80; // 변수 선언과 값의 할당 

예제

console.log(scroe); // undefined

score = 80; // 값의 할당
var score; // 변수 선언

console.log(score); // 80

값의 재할당

  • 변수의 값 재할당 가능
  • 상수는 재할당 불가

재할당 이전 값 처리

var score = 80; 
score = 90;

score 값이 재할당 되더라도, 재할당 전 선언된 값 undefined와 80은 메모리 공간은 유지, 가비지 콜렉터에 의해 나중에 자동 해체

5장. 표현식과 문

  • 값은 식(표현식)이 평가되 생성된 결과

리터럴

  • 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기

표현식

  • 수학 식

  • 프로그램을 구성하는 기본 단위이자 최소 실행 단위
  • 토큰 : 더 이상 나눌 수 없는 기본 요소(키워드 식별자, 세미콜론...)

세미콜론과 세미콜론 자동 삽입 기능

  • 세미콜론은 옵션
  • 0개 이상의 문을 중괄호로 묶은 코드 블록 뒤에는 세미콜론을 붙이지 않음.(예 : if문, for문, 함수 등)
  • 세미콜론 자동 삽입 기능(ASI)
function foo () {
	return 
	  {}
  // ASI 동작 결과 -> return; {};
  // 개발자 예측   -> return {};

표현식인 문과 표현식이 아닌 문

  • 구별 방법은 변수에 할당해 보는 것
  • 평가할 수 없다면 표현식 아닌 문

출처 : 모던 자바스크립트 Deep Dive(P.34 ~ P.57)
저자 : 이웅모 지음, 위키북스

profile
3년간 웹/앱, 자동제어 QA 🔜 개발자로 전향하여 현재 교육 회사에서 백엔드 개발자로 근무 중입니다.(LinkedIn : https://www.linkedin.com/in/dohyoung-kim-5ab09214b)

0개의 댓글