스코프는 자바스크립트를 포함한 모든 프로그래밍 언어의 기본이자 중요한 개념이다.

스코프의 대한 이해가 부족하면 다른 개념을 이해하기 어려울 수 있다.

스코프는 유효범위를 뜻한다.

먼저 간단한 예제를 확인해보자.

<script>
 function add(x, y) {
 
 // 매개변수는 함수 몸체 내부에서만 참조 가능하다
 //즉 ,매개변수의 스코프(유효범위)는 함수 몸체 내부다.
       console.log(x, y); // 2 5
       return x + y;
     }
     add(2, 5);
     console.log(x, y); ReferenceError : x is not defined
</script>

이렇듯 함수의 매개변수는 함수 몸체 내부에서만 참조가 가능하다.

또한 중첩함수에서의 코드로 살펴보자.

 <script>
 
      let a = 20;
      
      function outer() {
        console.log(a); // 20
        function inner() {
          let a = 10;
          console.log(a); //10
        }
        inner(); // 
      }
      
      outer();
 </script>

전역변수 let a =20으로 선언되었다.

outer함수를 호출하면 콘솔에 a를 출력하고 , inner함수선언과 동시에

a라는 변수를 만들어 콘솔에 출력하는 함수를 만들었다.

후에 inner함수를 호출한다.

여기서 왜 다른 값이 나오게 되는것일까?

여기서 중요한 개념은 전역 >> 아우터 >> 이너 의 순서가 중요하다

코드도 위계질서가 있는것이다.

먼저 이너는 자기 자신에서 a라는 변수가 있는지 수색에 들어간다 .

바로 있었기에 찾아서 10이라는 값을 출력한다

아우터에서는 어떨까? 아우터에서도 a라는 값을 찾고싶어하지만 아우터 함수 내

부엔 존재하지않는다.

그렇기때문에 아우터는 전역의 스코프범위에서 a라는 변수를 찾게된다.

이렇게 이너에서없으면 - 아우터 - 아우터에서 없으면 전역 이렇게 변수를 찾아나가는 과정에서 체인이 생긴다고 해서 스코프 체인이라고 부르게된다.

다음시간에는 함수 레벨 스코프와 렉시컬스코프에 대해서 공부해보자.

0개의 댓글