Skip to content

Latest commit

 

History

History
144 lines (83 loc) · 4.32 KB

04. Expression and Statement.md

File metadata and controls

144 lines (83 loc) · 4.32 KB

04. Expression and Statement

Statement

  • **문(statement; 명령문)**은 프로그램을 구성하는 기본 단위이며 최소 실행 단위다. 프로그램은 문의 집합이다.
  • 문은 여러 개의 **토큰(token)**으로 구성된다. 토큰은 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소이다.
var sum = 1 + 2;

여기서는 var, sum, =, 1, +, 2, +, ;이 토큰에 속한다.

  • 문은 선언문, 할당문, 조건문, 반복문 등으로 나눌 수 있다.
var x;		// 선언문
x = 13;		// 할당문
if (x > 1) { console.log(x); }		// 조건문
for (var i = 0; i < x; i++) { console.log(i); }		// 반복문

Expression

  • **식(expression; 표현식)**은 값으로 평가될 수 있는 문(statement)이다. 식은 평가되면 기존의 값을 참조하거나 새로운 값을 생성한다.
  • 표현식과 표현식이 평가된 값은 동치(equal)이다.
  • 리터럴은 값으로 평가되므로 식이다.
var age = 24;		// 숫자 리터럴 24는 값으로 평가되므로 식이다.
var age = 20 + 4;	// 20 + 4는 값으로 평가되므로 식이다.
  • 한편, 변수 식별자를 참조하면 변수 값으로 평가된다. 즉 식별자 참조는 식이다.
age;		// 변수 식별자 age는 24라는 값으로 평가되므로 식이다.
  • 문법적으로 값이 위치할 수 있는 자리에는 표현식도 위치할 수 있다.
var x = 1 + 2;
3 + 4;
x + 4;

3번째 줄에서 왼쪽 항의 x는 식별자 표현식이다.

Value

  • **값(value)**은 식(expression)이 평가(evaluate)되어 생성된 결과이다.
3 + 5; // 3 + 5라는 식은 평가되어 값 8을 생성한다.
var sum = 3 + 5;

변수 sum에는 3 + 5가 평가되어 생성된 결과인 8이 할당된다. 즉, 3 + 5는 할당 이전에 평가되어 값을 생성한다.

Literal

  • **리터럴(literal)**은 사람이 이해할 수 있는 문자 또는 기호를 사용하여 값을 생성하는 표기법이다.
4;

4는 아라비아 숫자 4를 사용해 기술한 숫자 리터럴이다. 자바스크립트 엔진은 이 숫자 리터럴 4를 평가하여 메모리에 숫자 값 4를 생성한다.

  • 자바스크립트 엔진은 코드가 실행되는 시점인 런타임(runtime)에 값을 평가하여 메모리에 값을 생성한다.

다른 타입의 리터럴은 Literals 참고

Semicolon and ASI

  • **세미콜론(;)**은 문의 종료를 나타낸다. 자바스크립트 엔진은 세미콜론을 통해 문이 종료한 위치를 파악하고 순차적으로 문을 하나씩 실행한다.
  • 코드 블록({}) 뒤에는 세미콜론을 붙이지 않는다. 이들은 문의 종료를 의미하는 자체 종결성(self closing)을 갖는다.
  • ASI(automatic semicolon insertion; 세미콜론 자동 삽입 기능): 자바스크립트 엔진은 소스코드를 해석할 때 문의 끝을 예측하여 세미콜론을 자동으로 붙여준다. 따라서 코드를 작성할 때 세미콜론은 생략할 수 있다.

Expression and Statement

  • 모든 문이 표현식인 것은 아니다.
var x;

변수 선언문은 값으로 평가될 수 없으므로 식이 아니다.

x = 1 + 2;

할당문은 값으로 평가될 수 있으므로 식이다. 따라서 값처럼 사용할 수 있다.

var y = x = 1 + 2;

1+23으로 평가되어 x에 할당되고, x3으로 평가되어 y에 할당된다.

Executing statement in chrome dev console

  • 크롬 개발자 도구에서 표현식이 아닌 문을 실행하면 undefined를 출력하며 이것을 완료 값(completion value)이라고 한다. 완료 값은 평가 결과가 아니므로 할당하거나 참조할 수 없다.
  • 크롬 개발자 도구에서 표현식인 문을 실행하면 평가된 값을 반환한다.

참고

  • 모던 자바스크립트 Deep Dive 5장 표현식과 문

스터디

다음중 값으로 평가될 수 있는 식인 것과 아닌 것을 구분하라

var x;		// 선언문
x = 13;		// 할당문
13;		// 리터럴
if (x > 1) { console.log(x); }		// 조건문

할당문, 리터럴은 값으로 평가될 수 있는 식이고 선언문, 조건문은 아니다.