1. 스코프 목적, 스코프 설정


목적

  1. 범위를 제한하여 식별자를 해결하려는 것(Identifier Resolution)
  2. 스코프내에서 식별자를 해결하기 위해서.

식별자 해결(Identifier Resolution)

변수 이름, 함수 이름을 찾는 것으로 이 때 스코프를 사용합니다. 스코프내에서 이름을 찾게 되면 값을 구할수 있으며

식별자 해결의 궁극적인 목적은 결국 식별자를 통해 이름을 찾아 값을 구하는 것입니다. 그리고 크게는 이름을 설정하는것도 식별자 해결이라 할 수 있습니다. 왜냐면 변수 이름을 스코프에 등록한다는것은 다음에 사용하려는 목적과 식별자를 찾을 때 사용하는 등록과 검색이라는 두가지 목적을 가지는데 이 두 목적을 식별자 해결(Identifier Resolution)이라 합니다.

결국, 스코프는 식별자 해결을 위해 있는것입니다.

스코프 설정

  1. 엔진이 function book(){}을 만나면 function 오브젝트를 생성 후

  2. 스코프를 설정합니다.

  3. 이렇게 function 오브젝트를 만드는 시점에 스코프를 결정하는 것을 정적 스코프라고 합니다.

  4. 함수를 호출 할 때 스코프를 결정하는 것을 동적 스코프라 합니다.

function book(){
	var point = 123;
	function get(){
		console.log(point);
	};
	get();
};
book()

스코프 설정 정리

function 오브젝트를 만날 때 스코프가 결정이 된다는 말은 book()함수가 호출되고 위에서부터 함수선언문 → 변수 초기화 → 코드 실행의 함수 코드 해석 순서를 가지게 되는데, 이 때 get function을 만나는순간 function 오브젝트가 생성되며 스코프가 결정됩니다. 이때 이 function의 스코프에는

point 가 포함이 되겠죠. 그렇기에 get function 내부에서 point가 스코프 범위내에 있기 때문에 사용을 할 수 있는것입니다.

동적 스코프에서 함수를 1만번 호출한다면? 스코프는 호출 할 때마다 만들어지기에 1만번 스코프가 생성됩니다. 반면, 정적 스코프에서는 function 오브젝트를 생성할 때 한번만 만들면되기 때문에 1번만 생성되면 됩니다. 그렇기에, function 오브젝트를 만나는 순간 스코프를 결정하는것이 좋습니다.