
값은 식이 평가되어 생성된 결과. 모든 값은 데이터 타입을 가지며, 메모리에 2진수(비트)의 나열로 저장됨. 메모리에 저장된 값은 데이터 타입에 따라 다르게 해석될 수 있음.// 10 + 20은 평가되어 숫자 값 30 생성.
10 + 20; // 30
// sum 변수에는 10 + 20이 평가되어 생성된 숫자 값 30 할당.
var sum = 10 + 20;사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법. 값을 생성하는 가장 기본적인 방법.// 숫자 리터럴 3
3

값으로 평가될 수 있는 문(statement). 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조함.var score = 100;var score = 50 + 50;score; // 100값으로 평가될 수 있는 문은 모두 표현식임.// 리터럴 표현식
10
"Hello"
// 식별자 표현식 (선언이 이미 존재한다고 가정)
sum
person.name
arr[1]
// 연산자 표현식
10 + 10
sum = 10
sum !== 10
// 함수/메서드 호출 표현식 (선언이 이미 존재한다고 가정)
square()
person.getName()프로그램을 구성하는 기본 단위이자 최소 실행단위. 문의 집합으로 이뤄진 것이 프로그램이며, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍임.token이란 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미. 예를 들어, 키워드, 식별자, 연산자, 리터럴, 세미콜론이나 마침표 등의 특수 기호는 문법적인 의미를 가지며 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소이므로 모두 토큰임. 
// 변수 선언문
var x;
// 할당문
x = 5;
// 함수 선언문
function foo () {}
// 조건문
if (x > 1) { console.log(x); }
// 반복문
for (var i = 0; i < 2; i++) { console.log(i); }세미콜론(;)은 문의 종료를 나타냄. 문을 끝낼 때는 세미콜론을 붙여야 함.// 조건문
if (x > 1) { console.log(x); }
// 반복문
for (var i = 0; i < 2; i++) { console.log(i); }function foo() {
return;
{}
}
// ASI의 동작 결과 => return {};
// 개발자의 예측 => return {};
console.log(foo()); // Output: undefined
var bar = function () {}
(function() {})();
// ASI의 동작 결과
// => var bar = function () {}(function() {})();
// 개발자의 예측
// => var bar =function () {}; (function() {})();
// TypeError; (intermediate value)(...) is not a function// 변수 선언문은 값으로 평가될 수 없으므로 표현식 X.
var x;
// 1, 2, 1 + 2, x = 1 + 2 는 모두 표현식임.
// x = 1 + 2 는 표현식이면서 완전한 문.
x = 1 + 2;// 표현식이 아닌 문은 값으로 평가될 수 없음.
// 변수 선언문은 값처럼 사용할 수 없음.
var foo = var x; // SyntaxError: Unexpected token 'var'// 변수 선언문은 표현식이 아닌 문.
var x;
// 할당문 x = 100 은 그 자체가 표현식임. 값처럼 사용 가능.
x = 100;// 표현식인 문은 값처럼 사용할 수 있음.
var foo = x = 100;
console.log(foo); // Output: 100
