(개념을) 이해한다는 것은 용어를 정확히 이해하고 설명할 수 있다는 것이다.
값은 표현식이 평가되어 생성된 결과다.
// 10 + 20은 평가되어 숫자 값 30을 생성한다.
10 + 20;
var sum = 10 + 20
sum
변수에 할당되는 값은 10 + 20이 평가된 결과인 숫자 값 30이다.사람이 이해할 수 있는 문자 또는 기호를 사용해 값을 생성하는 표기법.
3
예제의 3은 숫자 리터럴이다. 사람이 이해할 수 있는 숫자 3을 코드에 적으면 엔진은 이를 평가하여 숫자 값 3을 생성한다.
아직까지는 평가보단 해석이란 단어로 바꾸면 이해가 좀더 쉬워지는 느낌.
5.1 -> 값은 표현식이 평가되어 생성된 결과다.
표현식은 값으로 해석할 수 있는 문. 표현식이 해석되면 새로운 값을 생성하거나 기존 값을 참조한다. 리터럴도 값으로 해석되는데, 엔진에 의해 해석되어 값을 생성하므로 리터럴도 표현식이다.
표현식은 리터럴, 식별자, 연산자, 함수 호출 등의 조합으로 이뤄질 수 있다. 즉, 값으로 해석되는 모든 문은 표현식이다.
프로그램을 구성하는 기본 단위이자 최소 실행 단위. 문의 집합이 프로그램이고, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍이다.
문은 여러 토큰으로 구성된다. 토큰은 문법적으로 더 이상 나눌 수 없는 기본 요소. (키워드, 식별자, 연산자, 리터럴, 세미콜론, 마침표 등) 또한 문을 명령문
이라고도 부른다. 문이 실행되면 명령이 실행되고 무슨 일이 일어나게 된다.
(명령)문은 선언문
할당문
조건문
반복문
등으로 구분할 수 있다.
세미콜론은 문의 종료를 나타낸다. 세미콜론은 생략 가능한데, 엔진이 세미콜론 자동 삽입 기능을 암묵적으로 수행해주기 때문. 근데 세미콜론 붙이는게 익숙해서 사용하는게 좋을 듯.
구별하는 가장 간단한 방법은 변수에 할당해 보는 것. 표현식인 문은 값으로 해석되므로 변수에 할당할 수 있다. 하지만 표현식이 아닌 문은 값으로 해석할수 없으므로 변수에 할당하면 에러가 발생한다.
// 변수 선언문은 값으로 평가될 수 없으므로 표현식이 아니다.
var x;
// 1, 2, 1 + 2, x = 1 + 2는 모두 표현식이다.
// x = 1 + 2는 표현식이면서 완전한 문이기도 하다.
x = 1 + 2;
개발자 도구에서 표현식이 아닌 문을 설정하면 언제나 undefined를 출력한다. 완료 값은 표현식을 해석한 결과가 아니다. 그래서
var x;
같은 변수 선언문은 undefined를 뱉으니 표현식이 아닌 듯.
var foo = var x; // SyntaxError: Unexpected token var
// 위 예제의 var x는 변수 선언문이므로 값으로 평가될 수 없다.
// 따라서 변수 선언문은 표현식은 값처럼 사용할 수 없다.
// 변수 선언문은 표현식이 아닌 문이다.
var x;
// 할당문은 그 자체가 표현식이지만 완전한 문이기도 하다. 즉, 할당문은 표현식인 문이다.
x = 100;
var foo = x = 100;
console.log(foo); // 100
표현식인 문은 값처럼 사용할 수 있다.