For the complete documentation index, see llms.txt. This page is also available as Markdown.

식과 문이란 무엇인가...

식.. 간단히 살펴보자

식은 expression이라고 한다. 간단히 말해 하나의 값이 되는 것. 여기서 값이란 기본값은 물론 객체 등의 참조값도 포함이 된다.

자바스크립트가 인정하는 식에는

  1. 값 식: 값 자체도 식으로 인정

  2. 연산식: 연산자가 포함된 경우 결과는 반드시 하나의 값이 되어 최종적으로는 값 식이 된다.

  3. 리터럴: 리러털은 대부분 객체 생성을 위한 일종의 매크로임. 리터럴의 결과는 참조값이 된다.

    {} // 오브젝트 리터럴
    function(){} // 함수리터럴
    [] // 배열리터럴
    /abcd/ // 정규식 리터럴
  4. 함수호출: 함수를 호출한 결과는 값이 된다. 자바는 void 를 반환하면 값이 될 수 없지만, JS 는 명시적으로 값을 반환하지 않아도 undefined 가 반환되어 언제나 값으로 수렴된다.

위 4종류를 자세히 읽어보면 알겠지만, 모든 식은 오직 값 식 만이 존재한다. 결론적으로 다른 모든 식은 하나의 값에 수렴하여 값 식이 되는 것이므로 값 == 식 으로 이해하자.

문.. 간단히 살펴보자

문이란 statement 라 한다. 의미 상으로 인터프리터에게 내리는 지시문이라 할 수 있다.

따라서 문은 파싱된 이후에 아무것도 남지 않게 되므로 값으로 쓸 수 없다.

var a = if (b) return 3; // 에러!!

위의 코드는 에러가 발생한다. 왜 에러가 발생하는지 설명할 수 있나?

위에서 사용한 if (식) 문; 형식은 미리 인터프리터에 정의된 제어문 이다. if 문은 식이 참일 때 지정된 문을 실행하도록 되어있는 인터프리터를 위한 지시자 일 뿐 어떠한 값도 될 수 없다.

따라서 위의 예시와 같이 a에 if 를 할당하려고해도 아무것도 없으므로 할당이 불가능하다.

문 은 당연하게도 인터프리터의 파싱 규칙 그 자체이므로 언어 규격 상 매우 엄격하게 정의되어 있다. 자바스크립트에서 허용되는 문은 다음과 같다.

  1. 제어문: 미리 엄격하게 정의된 형식의 문 들이다. ex) if, if else, switch, for, for in, while, do while, case, label, continue, break, return, var, try, catch

  2. 공문(빈문): 아무것도 없는 문도 문으로 인정한다. while 문은 while (식) 문 ; 와 같은 형태인데 아래와 같은 구문에서 문이 비어있는 공문이기 때문에 에러가 발생하지 않는다.

  3. 식문: 자바스크립트의 가장 큰 특징. 식을 문으로 인정한다. 식은 값이므로 값문 이라고 해도 무방함. 따라서 아래와 같은 식문이 전부 정상적으로 사용이 가능하다.

문 자체는 단일한 하나의 문장이다. 하지만, 중괄호로 묶어 마치 하나의 문처럼 사용할 수 있는데 이를 중문이라고 한다. (단 한줄로 된 상대적인 개념은 단문이라고 한다.)

다양한 제어문에서 문이 올 자리는 단문 또는 중문이 올 수 있다. if 문의 경우 if (식) 문; 의 형태인데, 아래와 같이 단문도 올 수 있고 중문 또한 올 수 있다.

자바나 c계열에서는 중문을 만들면 변수의 스코프도 동시에 생성되어 지역변수 개념이 생긴다. JS 에서는 변수란 해시맵의 KEY 이므로 함수를 통한 스코프객체를 만들어야 변수를 쓸 수 있다. 따라서 단지 중문을 생성한 것만으로는 지역 스코프가 생성되지 않는다!!!

Last updated