Post

[모던 자바스크립트 Deep Dive]05장 표현식과 문

5.1 값

  • 표현식이 평가되어 생성된 결과물
  • 평가: 식을 해석해서 값을 생성하거나 참조하는 것
  • 모든 값은 데이터 타입을 갖는다.
  • 모든 값은 2진수, 즉 비트의 나열로 저장된다.

변수

  • 하나의 값을 저장하기 위해 확보한 메모리 공간 또는 거기에 붙인 이름
  • 값은 변수에 할당된다.
    1
    2
    
    // 변수에는 10 + 20이 평가되어 생성된 숫자 값 30이 할당된다.
    var sum = 10 + 20;
    
    • sum에는 10 + 20이 할당되는 것이 아니라 평가 결과인 30이 할당된다.

5.2 리터럴

  • 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법
    • 사람이 이해할 수 있는 문자: 아라비아 숫자, 알파벳, 한글 등
    • 약속된 기호: ‘’, “”, ., [], {}, // 등
  • 자바스크립트 엔진은 런타임에 리터럴을 평가해 값을 생성
    • 런타임: 코드가 실행되는 시점
    • 예를 들어 자바스크립트 엔진은 코드에서 숫자 리터럴 3을 읽으면 이를 평가해 숫자 값 3을 생성한다.

5.3 표현식

  • 값으로 평가될 수 있는 문(statement)
  • 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조
  • 표현식은 리터럴, 식별자, 연산자, 함수 호출 등의 조합으로 이루어 진다.
    • 예를 들어 리터럴은 값으로 평가되므로 리터럴은 그 자체로 표현식이다. 변수 식별자를 참조하면 변수 값으로 평가되므로 표현식이다.
  • 표현식과 표현식이 평가된 값은 동치(equivalent)다.
    • 문법적으로 값이 위치할 수 있는 자리에 표현식도 위치할 수 있다.

5.4 문

  • 프로그램을 구성하는 기본 단위이자 최소 실행 단위
    • 프로그램: 문의 집합
    • 프로그래밍: 문을 작성하고 순서에 맞게 나열하는 것
  • 문은 토큰으로 구성된다.
    • 토큰: 문법적 의미를 가지며 문법적으로 더 나눌 수 없는 코드의 기본 요소
      • 키워드, 식별자, 연산자, 리터럴, 세미콜론, 마침표 등
  • 문은 명령문이라고도 한다.
  • 문에는 선언문, 할당문, 조건문, 반복문 등이 있다.

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

세미콜론

  • 문의 종료를 의미
  • 단, 0개 이상의 문을 중괄호로 묶은 코드 블록 뒤에는 세미콜론을 붙이지 않는다.
    • 이러한 코드 블록은 자체 종결성(self-closing)을 갖는다.
    • 코드 블록에는 if 문, for 문, 함수 등이 존재

세미콜론 자동 삽입 기능

  • ASI, automatic semicolon insertion
  • 자바스크립트 엔진이 소스코드를 해석할 때 문의 끝으로 예측되는 지점에 자동으로 세미콜론을 붙임
    • 따라서 세미콜론은 생략 가능
  • 하지만 개발자의 의도와 일치하지 않는 경우가 있기 때문에 세미클론 사용을 권장

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    function foo() {
      return;
      {
      }
      // ASI의 동작 결과 => return; {};
      // 개발자의 예측 => return {};
    }
    
    console.log(foo()); // undefined
    
    var bar = (function () {})(function () {})();
    // ASI의 동작 결과 => var bar = function () {}(function() {})();
    // 개발자의 예측 => var bar = function () {}; (function() {})();
    // TypeError: (intermediate value)(...) is not a function
    

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

  • 표현식인 문
    • 값으로 평가될 수 있는 문
      • 할당문 등
    • 값으로 평가되므로 변수에 할당할 수 있다.
      1
      2
      3
      
      // 표현식인 문(x = 100)은 값처럼 사용할 수 있다
      var foo = (x = 100);
      console.log(foo); // 100
      
  • 표현식이 아닌 문
    • 값으로 평가될 수 없는 문
      • 변수 선언문 등
    • 값으로 평가되지 않으므로 변수에 할당할 수 없다.

완료 값

  • completion value
  • 크롬 개발자 도구에서 표현식이 아닌 문을 실행하면 undefined가 출력되는데 이를 완료 값이라 한다.
  • 완료 값은 표현식의 평가 결과가 아니다.
This post is licensed under CC BY 4.0 by the author.