값(value)
식(표현식, expression)이 평가(evaluate)되어 생성된 결과 var result = 10 + 20;
에서 10과 20이라는 숫자는 런타임(할당 이전)에 평가되어 값을 생성하고, 런타임 때 10 + 20을 평가하여 30이라는 값을 result
에 할당한다. 즉, 변수 result가 기억하는 메모리 공간의 값은 10 + 20이 아닌 값 30
이다.
리터럴(literal)
사람이 이해할 수 있는 문자 또는 약속된 기호를 사용하여 값을 생성하는 표기 방식
자바스크립트 엔진은 코드가 실행되는 시점(런타임, runtime)에 리터럴을 평가하여 값을 생성한다. 즉, 리터럴은 값을 생성하기 위해 미리 약속한 표기법(notation)이라고 할 수 있다.
- 10, 20은 사람들 사이에서 숫자리는 기호로 약속되어 있는데, 이를 숫자 리터럴이라고 한다.
- 숫자 리터럴 10과 20을 코드 내에
var result = 10 + 20;
이라고 작성하면 자바스크립트는 이를 평가하여 런타임 이전에 숫자 값 10과 20을 생성한다. - 런타임 때 코드가 실행되는데 이때 리터럴은 평가되어 값을 생성한다. 즉
10 + 20
의 값을 평가한 결과30
을 result라는 변수의 값이 생성된다.
표현식 (expression)
값으로 평가(evaluation)될 수 있는 문(statement)이다. 즉, 표현식이 평가되면 값을 생성하거나 값을 참조한다. 따라서 값으로 평가되는 문은 모두 표현식이다. 이때 표현식과 표현식이 평가된 값은 동등한 관계, 즉 동치(equivalent)이다.
- 변수에 값을 할당
x = 7
은 x에 7을 할당시키기 위해 연산자(=)를 사용한 것으로, 7로 계산된다. - 단순히 값을 가짐.
3 + 4
는 위 예시처럼 변수에 7을 할당하는 것이 아니라 그 자체로 3과 4를 더한 값을 갖는다. - 표현범주: 산수(산술 연산자), 문자열, 논리(참, 거짓), 일차식, 좌변식
문(statement)
프로그램을 구성하는 기본 단위이자 최소 실행 단위. 문의 집합으로 이루어진 것이 프로그램이며 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍이다. 문은 여러 토큰들로 구성된다. 토큰(token)이란 문법적인 의미를 가지며, 문법적으로 더이상 나눌 수 없는 코드의 기본 요소를 의미한다. 선언문, 할당문, 조건문, 반복문 등이 있다.
문은 반복문이나 if문처럼 action을 수행하게 하기 때문에 명령문이라고도 한다. 자바스크립트 엔진이 문이 있기를 기대하는 곳에 표현식을 쓸 수 있는데, 이를 표현식인 문이라고 한다. 그러나 그 반대는 불가하다. 즉 표현식이 있기를 기대하는 곳에 문을 쓸 수는 없다. 예를들어 if문은 함수의 인수가 될 수 없다.
세미콜론과 세미콜론 자동 삽입 기능
세미콜론( ; )은 문의 종료를 나타내며, 문은 반드시 세미콜론으로 끝나야 한다. 단, 0개 이상의 문을 중괄호로 묶은 코드 블록 { … } 뒤에는 세미콜론을 붙이지 않는다. 예를 들어 if 문, for 문, 함수 등의 코드 블록 뒤에는 세미콜론을 붙이지 않는다. 이들 코드 블록은 언제나 문의 종료를 의미하는 자체 종결성(self closing)을 갖기 때문이다.
표현식과 문
표현식: become a value
. 값이 생성되거나 문의 일부가 될 수 있다.
문: perform action
. 값이 생성되지 않고, 실행문이나 코드블록의 action을 컨트롤할 뿐이다.
const x = 5;
는 숫자 리터럴 5를 해석하여 값 5를 생성하는 것이다.const y = getAnswer();
는 어떤 값을 반환하도록 호출하는 것이므로 역시 표현식이다.
표현식인 문과 표현식이 아닌 문
표현식인 문과 표현식이 아닌 문을 구별하는 방법은 변수에 할당하는 것이다. 변수에 할당이 가능하면 표현식인 문, 그렇지 않으면 표현식이 아닌 문이다.
문:
실행되거나 특정한 action을 수행할 수 있는 코드의 조각을 말한다.표현식:
평가되어 값을 생성할 수 있는 코드의 조각을 말한다.표현식인 문:
값으로 평가될 수 있는 문. ex.변수 할당문표현식이 아닌 문:
값으로 평가될 수 없는 문 ex.변수 선언문
1 | var x; //변수 선언문 |
구글 개발자 도구에서 위의 var x;
와 같이 변수 선언문을 실행하면 undefined
가 반환된다. 변수 선언문은 표현식이 아닌 문이므로 값을 반환해야할 자리에 평가된 값이 아닌 undefined
가 출력되는 것이고, 이를 완료값
이라고 한다. 이는 자바스크립트 엔진이 암묵적으로 할당해주는 것이며, 변수에 담을 수 없고, 참조할 수 없는 값이다. 반면 변수에 할당을 하면 할당된 값이 출력되므로 할당문은 표현식인 문이라고 할 수 있다.
References
MDN
2ality
Poiemaweb
Codexpanse
JavaScript for impatient programmers