1. 스코프란 무엇인가

엔진의 역할을 맡아서 스코프와 대화해 보자

function foo(a) {
	var b = a;
	return a + b;
}

var c = foo(2);
  1. 모든 LHS 검색을 찾아라 (3개)
  2. 모든 RHS 검색을 찾아라 (4개)

스코프는 확인자 이름으로 변수를 찾기 위한 규칙의 집합

LHS와 RHS를 구분하는 것이 왜 중요할까? 동작이 다르기 때문

function foo() {
	console.log(a + b);
	b = a;
}

foo(2);

2. 렉시컬 스코프

렉시컬 스코프는 렉싱 타임에 정의되는 스코프다. 프로그래머가 코드를 짤 때 변수와 스코프 블록을 어디서 작성하는 가에 따라 기초해서 렉서가 코드를 처리할 때 확정 된다.

렉시컬 스코프 검색 과정은 일차 확인자 검색에만 적용된다. 예를 들어 foo.bar.baz의 참조를 찾는다고 하면 렉시컬 스코프 검색은 foo 확인자를 찾는 데 사용 되지만 일단 foo를 찾고 나서는 객체 속성 접근 규칙을 통해 barbaz를 찾는다.

3. 함수 vs 블록 스코프