[모던 자바스크립트 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.