Lexical Scope vs Dynamic Scope

Taeseon Kim·2021년 8월 10일
0
post-thumbnail

저번 시간엔 var, const, let의 차이에 대해 알아보았다.

자료를 정리하고 공부하던 중 정리해두면 좋을 만한 주제를 써보려한다.

먼저 자주 나올 단어인 scope는 변수의 유효 범위를 뜻한다. 어떤 변수를 뜻하는 것인지는 아래에서 천천히 살펴보자.

Lexical Scope vs Dynamic Scope

물론,, 내가 자바스크립트를 만든 브랜든 형님의 고종사촌은 아니기 때문에,,,
100% 활용법! 이라기 보단 그저 내 스스로와 혹시 이 글을 통해 도움을 받을 수도 있는 사람을 위해,,

Lexical Scope
렉시컬 스코프는 함수 선언 위치에 따라 결정되는 상위 스코프이다.

역시 예시가 제일 좋겠지.

var byeonSu = 1; // Lexical Scope에서 가장 가까운 byeonSu변수
function changePrint (){
	console.log(byeonSu);
}

function change (){
  var byeonSu = 100;
  changePrint();
}

change();

만약 위와 같은 코드가 있다면, 출력값은 어떻게 될 것인가?

정답은 1이다.

자바스크립트는 기본적으로 Laxical Scope를 따른다.
따라서 change함수를 통해 byeonSu변수의 값이 새로 할당되었다고 하더라도,
changePrint함수가 실행될 때 Laxical Scope의 범위를 따른다. console.log(byeonSu)는 changePrint함수를 감싸는 범위인 전역 변수로 선언되어있는 var byeonSu = 1; 을 인자로 받게 될 것이다.

Dynamic Scope
다이나믹 스코프는 함수 호출 위치에 따라 결정되는 상위 스코프이다.

자바스크립트로는 이를 구현할 수 없다. 하지만 나와 당신의 이해를 위해 Dynamic Scope를 따르는 자바스크립트가 있다고 친다면,,

var byeonSu = 1;
function changePrint (){
  console.log(byeonSu);
}

function change (){
  var byeonSu = 100; // Dynamic Scope에서 가장 가까운 byeonSu변수
  changePrint();
}

change();

change함수 안에서 호출된 changePrint 함수가 호출 위치에서 가까운 var byeonSu = 100;의 값을 console.log에 전달할 것이다.

따라서 Dynamic Scope를 따르는 언어에서는 console.log를 통해 100이 출력 될 것이다.

다이나믹 스코프는 알아본 결과 Perl,,,등등,,, 에서 적용되는 scope라는데,, 어쨌든 차이를 알았으니 되었다.

profile
공부하여 이해가 된 것만 정리합니다.

0개의 댓글