반응형

※공부를 위해 영어번역이 들어갔으므로 틀린부분이 있다면 알려주세요

 

먼저 lexical scope는 제한적인 범위 (= static scope / 정적 범위 라고도 불림)이며

이는 C언어의 문법과 유사한 개념이다

 

 

요약하면

선언한 곳에서의 사용만 가능한 것들

선언된 외의 지역에서 사용 시, 문제가 생기는 것들

 

 

아래는 상세 이해를 돕는 예시들

 

 

스피드 웨건) 스코프란?

스코프 (MDN said)

현재 실행되는 컨텍스트를 말한다.

컨텍스트는  표현식이 "표현"되거나 참조 될 수 있음을 의미

(= 현재 실행되는 값 또는 표현 = 스코프 = 간단하게 현재 실행중인 범위)

 

만약 변수 또는 다른 표현식이 "해당 스코프"내에 있지 않다면 사용할 수 없다.

(= 특정 함수 내에서 선언된 변수는, 그 함수 밖에서 사용이 불가능한것과 같음)

 

스코프는 또한 계층적인 구조를 가지기 때문에

하위 스코프는 상위 스코프에 접근할 수 있지만 반대는 불가하다.

(이게 중요한듯)

 

함수 자바스크립트에서 클로저 역할을 하기 때문에

스코프를 생성하므로

함수 내에 정의된 변수는 외부 함수나 다른 함수 내에서는 접근 할 수 없다.

 

 

 

이제 다시 lexical scope에 대한 예제를 보자

void fun()
{
    int x = 5;

    void fun2()
    {
        printf("%d", x);
    }
}

모든 내부 단위 함수(임의로 표현)는 그 바깥 단 함수의 변수에 접근이 가능하지만

반대로의 접근은 불가능하다

 

위의 코드를 기준으로 보면, func2 함수는 앞서 표현한 내부 단위 함수로,

func 함수 내의 변수(int x=5;)에 접근이 가능하다

 

-> 이러한 접근이 lexical scope

 

 

또 다른 예제

var scope = "I am global";
function whatismyscope(){
   var scope = "I am just a local";
   function func() {return scope;}
   return func;
}

whatismyscope()()

결과 : I am just a local

(I am a global 이 아닌, I am just a local로 출력이 됨)

 

func 함수는, whatismyscope 함수의 범위 아래에서 정의된 것을 접근할수있기 때문

 

 

" functions are executed using the scope chain that was in effect when they were defined "

 

=함수는 정의된 범위에서 *scope chain을 이용해 실행된다

(scope chain : 위의 코드 예로, func에서 없는 scope 변수를 윗 단인 whatismyscope 내에서 찾아내는것 또는 이런 방식)

 

 

= 정의된 곳에서 사용 가능하도록 되는것,

그것이 함수

무스비

 

 

 

 

간략하게 대비되는 성질로는 dynamic scope (= 동적 스코프)가 있다

= 선언되고 나서 어디에서든 접근이 가능한 범위

 

 

 

 

출처 :

lexical scope 란?

https://stackoverflow.com/questions/1047454/what-is-lexical-scope

 

What is lexical scope?

What is a brief introduction to lexical scoping?

stackoverflow.com

 

스코프 란?

https://developer.mozilla.org/ko/docs/Glossary/Scope

 

스코프 - 용어 사전 | MDN

현재 실행되는 컨텍스트를 말한다. 여기서 컨텍스트는  값과 표현식이 "표현"되거나 참조 될 수 있음을 의미한다. 만약 변수 또는 다른 표현식이 "해당 스코프"내에 있지 않다면 사용할 수 없

developer.mozilla.org

 

반응형

+ Recent posts