YeonjuOHYE / javascript

0 stars 0 forks source link

유돈노#part2#1) 스코프란 무엇인가 #11

Open YeonjuOHYE opened 5 years ago

YeonjuOHYE commented 5 years ago

chapter1

스코프란 무엇인가? 특정 장소에 변수를 저장하고 나중에 그 변수를 찾는 데 사용하는 규칙

1.1 컴파일 이론

자바스크립트는 컴파일 언어다

컴파일레이션 3단계

1)토크나이징/렉싱 문자열을 나누어 토큰이라 불리는 의미 있는 조각으로 만드는 과정 +)토크나이징과 렉싱의 차이는 토큰을 무상태(전자) 유상태(후자)로 인식하느냐 그 차이..!

2)파싱 위에서 토큰으로 분리한 토큰 배열을 문법 구조를 반영하여 중첩 원소를 갖는 트리 (AST)형태로 바꾸는 과정

3)코드 생성 AST를 컴퓨터에서 실행 코드로 바꾸는 과정

※ 자바스크립트 컴파일레이션은 미리 되지 않고 거으 직전에 된다( 그렇담 다른 언어의 경우에는?)

1.2 스코프 이해하기

1.2.2 앞과 뒤

var a = 2;

컴파일러가 진행하는 것 1.컴파일러가 var a를 만나면 스코프에게 변수 a가 특정한 스코프 컬렉션 안에 있는지 묻고 변수 a가 이미 있다면 컴파일러는 선언을 무시하고 지나가고, 그렇지 않으면 컴파일러는 새로운 변수 a를 스코프 컬렉션 내에 선언하라고 요청 2.그 후 컴파일러는 'a =2' 대입문을 처리하기 위해 나중에 엔진이 실행할 수 있는 코드를 생성한다. 엔진이 실행하는 코드는 먼저 스코프에게 a라 부르는 변수가 현재 스코프 컬렌션내에서 접근할 수 있는지 확인. 가능하다면 엔진은 변수 a를 사용하고, 아니라면 엔진은 다른 곳을 살핀다.

1.2.3 컴파일러체

var c = foo(2);

LHS 는 (a=2), b, c (3개)
RHS a...,...b, 2, =a;  (4개)

##  1.3 중첩 스코프 
스코프는 다른 스코프 안에 중첩 될 수 있다(중첩 스코프)
중첩스코프를 탐사할 때 사용하는 간단한 규칙은 다음과 같음
- 엔진은 현재 현재 스코프에서 변수를 찾기 시작, 찾지 못하면 한 단계씩 올라간다. 
- 최상위 글로벌 스코프에 도달하면 변수를 찾았든 못찾았든 검색을 멈춘다. 

## 1.4 오류
LHS 와 RHS는 검색 방식은 변수가 아직 선언되지 않았을 때 서로 다르게 동작 
```javascript
function foo(a) {
 console.log(a+b);
b = a;
}

foo(2);

RHS에서 값 못 찾으면 referenceError LHS에서 못 찾으면 변수 생성해서 엔진에 넘겨준다. (※ strict mode에서는 에러 던진다. )