YDNJSY Scope & Closures - 1. What's the Scope?

코스·2020년 11월 18일
0

You Don't Know JS Yet

목록 보기
5/8
post-thumbnail

이 시리즈는 You Don't Know JS Yet (1판인 You Don't Know JS의 개정판) 을 가지고 스터디를 진행하면서 요약 정리한 글입니다. 내용에 대한 퀴즈도 깃헙 리포지토리에 올리고 있으니 참고하시면 더 도움이 되실 것 같습니다. 내용에 대해 오류가 있거나 궁금하신 점이 있다면 댓글 달아주세요!

Compiled vs. Interpreted

JS의 스코프를 이해하기 전에는 JS의 작동 원리를 간략하게 이해해야 합니다. 이에 대해서는 이전 글에서 정리를 했지만, 간단하게 한번 더 정리해볼까 합니다. (자세한 설명을 보고 싶으시다면 윗 링크를 확인해주시길 바랍니다.)

세상에 있는 프로그래밍 언어들을 작동하는 방식중 컴파일 언어와 인터프리팅 언어가 있는데, 이 둘간의 차이점은 코드를 처리하는 과정에 있습니다. 인터프리팅 언어는 코드를 한줄한줄씩 해석하고 실행하는데, 컴파일 언어는 코드를 전체적으로 해석 이후 실행합니다. 이 책은 지난번에도 언급했듯, JS는 컴파일 언어로 생각하고 서술을 진행합니다.

Compiling Code

그럼 JS는 세부적으로 어떻게 코드를 파악하고 실행할까요? 다음과 같은 3단계를 통해 실행하게 됩니다.

  1. Tokenizing / Lexing 을 통해 코드를 작은 단위로 쪼갠다
  2. 쪼갠 코드를 AST로 Parsing한다.
  3. 변환한 AST를 실행가능한 코드로 변환한다.

더 간단하게 요약하자면, JS는 파싱 후 실행하는 과정을 따라갑니다. 이렇게 때문에 실행 전에도 당연히 오류가 발생할 수 있기에 Syntax error, Early eror, Hoisting과 같은 에러가 나올 수 있는 것입니다. 예시로 든 에러들은 앞줄에 이상이 없더라도 앞줄도 실행이 안되는 상태가 됩니다.

Compiler Speak

JS에서 변수를 어떻게 관리하는지 알아보기 전에, 변수를 사용법에 따라 두가지 역활로 나누어 보겠습니다.

  • Target 변수는 주로 할당받는 변수를 의미합니다.
  • Source 변수는 Target 변수가 아닌 다른 변수들을 모두 의미하며, 변수 안 값이 사용되는 변수를 의미합니다.

이때, 객채나 클래스의 요소는 Target과 Source로 나누어질수 없습니다. 요소는 변수가 아니고, 이에 대해서는 추후 객체를 다룰 때 언급할 예정입니다.

profile
잡다한거 하는 개발자

0개의 댓글