엔진의 역할을 맡아서 스코프와 대화해 보자
function foo(a) {
var b = a;
return a + b;
}
var c = foo(2);
c
에 대한 참조를 구해야 하는데 아니?foo
함수 내에서 파라미터에 대입할 a
에 대한 참조를 구해야 하는데 아니?b
에 대한 참조를 구해야 하는데 아니?foo
에 대한 값을 찾아 줘b
에 대입할 건데 a
에 대한 값을 찾아 줘a
에 대한 값을 찾아 줘b
에 대한 값을 찾아 줘스코프는 확인자 이름으로 변수를 찾기 위한 규칙의 집합
LHS와 RHS를 구분하는 것이 왜 중요할까? 동작이 다르기 때문
function foo() {
console.log(a + b);
b = a;
}
foo(2);
렉시컬 스코프는 렉싱 타임에 정의되는 스코프다. 프로그래머가 코드를 짤 때 변수와 스코프 블록을 어디서 작성하는 가에 따라 기초해서 렉서가 코드를 처리할 때 확정 된다.
렉시컬 스코프 검색 과정은 일차 확인자 검색에만 적용된다. 예를 들어 foo.bar.baz
의 참조를 찾는다고 하면 렉시컬 스코프 검색은 foo
확인자를 찾는 데 사용 되지만 일단 foo
를 찾고 나서는 객체 속성 접근 규칙을 통해 bar
와 baz
를 찾는다.