문법

문(Statement) vs 식(Expression)

var a = 3 * 6;
var b = a;
b;

I. 문의 완료값

모든 문은 완료값을 가진다.

if (true) { b = 4 + 38; }

  - 블록 내의 마지막 문 b = 4 + 38의 완료값이 42이므로 if 블록의 완료 값도 42를 반환
  - 즉, ***블록의 완료값은 내부에 있는 마지막 문의 값을 암시적으로 반환한 값***

### II. 표현식의 부수효과
- 대부분의 표현식에는 부수효과가 없다.
- 다음의 함수 호출 표현식은 부수효과를 가진 표현식의 전형적인 예이다.
  ```javascript
  function foo() {
    a = a + 1;
  }

  var a = 1;
  foo();        // 결괏값 : 'undefined', 부수 효과 : 'a'가 변경됨.
  var a = 42;
  var b = a++;
  var a, b, c;
  a = b = c = 42;

III. 콘텍스트 규칙

자바스크립트 문법 규칙 중에 같은 구문이지만 어디에서 어떤 식으로 사용하냐에 따라 서로 다른 의미를 가지는 경우가 있다.

중괄호

레이블

{
  foo: bar()
}

블록

[] + {};  // "[object Object]"
{} + [];  //  0