본문 바로가기
JS

스코프 Scope

by memory-log 2020. 10. 10.

스코프

특정 장소에 변수를 저장하고 나중에 변수를 찾는 데는 잘 정의된 규칙이 필요하다는 규칙

어디서 어떻게 변수를 찾는가를 결정하는 규칙의 집합

 

중첩 스코프

스코프도 다른 스코프 안에 중첩 될수 있다.

대상 변수를 현재 스코프에서 찾지 못하면 엔진은 다음 바깥의 스코프로 넘어가는 식으로 변수를 찾거나 글로벌 스코프라 부르는

가장 바깥 스코프에 도달할 때까지 반복한다.

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

let b = 2;
foo(2); //4

b에 대한 참조는 함수 foo 안에서 처리할수 없다.

함수를 포함하는 스코프에서 처리한다. (글로벌 스코프)

 

렉시컬 스코프

프로그래머가 코드를 짤 때 변수와 스코프 블록을 어디서 작성하는가에 기초해서 코드를 처리할 때 확정된다.

 

렉시컬 스코프를 속이는 방법

  • eval() : 하나 이상의 선언문을 포함하는 코드 문자열을 해석하여 렉시컬 스코프가 있다면 런타임에 수정
  • with() : 객체 참조를 하나의 스코프로, 속성을 확인자로 간주하여 런타임에 완전히 새로운 렉시컬 스코프를 생성 

단점 : 컴파일 단계에서 수행한 스코프 검색관련 작업을 무산시킨다. 코드는 더 느리게 동작하므로 사용 지양 

 

토크나이징 / 렉싱

Tokenizing / Lexing

 

문자열을 나누어 토큰이라 불리는 의미 있는 조각으로 만드는 과정

let a = 10;



let

a

=

10

;

 

파싱 Parsing

토큰 배열을 프로그램 문법 구조를 반영해서 중첩 원소를 갖는 트리 형태로 바꾸는 과정

 

코드 생성 

추상 구문 트리를 실행 코드로 바꾸는 과정

 

 

'JS' 카테고리의 다른 글

useSWR 리액트 훅 데이터 라이브러리  (0) 2020.12.19
자바스크립트 모듈관리  (0) 2020.10.10
ES6 주요 문법 활용하기  (0) 2020.10.01
javascript 연산자  (0) 2020.09.29
Promise 프로미스 사용하기  (0) 2020.09.23

댓글