Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

렉시컬 스코프(Lexical Scope) #25

Open
BKJang opened this issue Jul 9, 2019 · 1 comment
Open

렉시컬 스코프(Lexical Scope) #25

BKJang opened this issue Jul 9, 2019 · 1 comment
Labels
Advance of JS It is related to advance of JS.

Comments

@BKJang
Copy link
Owner

BKJang commented Jul 9, 2019

🙏 Reference

@BKJang BKJang added the Basic of JS It is related to basic concept of JS. label Jul 9, 2019
@BKJang
Copy link
Owner Author

BKJang commented Jul 9, 2019

렉시컬 스코프(Lexical Scope)

자바스크립트는 렉시컬 스코프를 지원한다.

우선적으로, 자바스크립트 엔진에서 코드를 컴파일 하는 과정을 보면 다음과 같다.

  • 토크나이징/렉싱 - 코드를 잘게 나누어 토큰으로 만든다.
  • 파싱 - 나눈 토큰을 의미있게 AST(Abstract Syntax Tree)라는 트리로 만든다.
  • 코드생성 - AST를 기계어로 만든다.

렉시컬 스코프란 1단계에서 발생하는 즉, 렉싱 과정에서 정의되는 스코프를 말한다.
프로그래머가 변수와 스코프 블록을 어떻게 구성하는냐에 따라 렉싱 타임에서 정의되는 스코프를 렉시컬 스코프라고 한다.

var x = 'global'

function test1() {
    var x = 'local';
    test2();
}

function test2() {
   console.log(x);
}

test1(); //global
test2(); //global

위의 코드에서 test2()함수를 어디서 호출하는지가 아닌 어디에 선언되어있냐에 집중할 필요가 있다.

즉, test2()함수의 상위 스코프는 test1()과 전역이 아닌 전역이다. 이에 따라 test2()에서 출력한 값은 global이 나올 것이다.

쉽게 말하면, 렉시컬 스코프는 함수를 어디서 호출하는지가 아닌 어디서 선언했는지에 따라 결정된다. 이러한 특성때문에 정적 스코프(Static Scope) 라고도 한다.

@BKJang BKJang added Advance of JS It is related to advance of JS. and removed Basic of JS It is related to basic concept of JS. labels Jul 9, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Advance of JS It is related to advance of JS.
Projects
None yet
Development

No branches or pull requests

1 participant