[자바스크립트] 자바스크립트 스코프

2021년 03월 26일, 22:20

자바스크립트 스코프


스코프란?

  • 참조 대상 식별자를 찾아내기 위한 규칙
  • ex)변수, 함수

스코프 종류

  1. 전역스코프

    • 코드 어디에서든지 참조 가능
  2. 지역 스코프(or 함수 스코프)

    • 함수 코드 블록이 만든 스코프로 함수 자신과 하위 함수에서만 참조 가능
  3. 블록 스코프(let, const)

    • 블록 레벨(중괄호)에서 선언된 변수는 블록 내부에서만 유효
  4. 렉시컬 스코프

    var x = 1;
    
    function foo() {
      var x = 10;
      bar();
    }
    
    function bar() {
      console.log(x);
    }
    
    foo(); // ?
    bar(); // ?
    

     위와 같은 경우는 bar가 어떤 상위 스코프를 가지는지 2가지로 생각해볼 수 있다.
    
    1. foo의 x=10을 가진다.
    2. 전역의 x=1을 가진다.

    1번의 경우 동적 스코프(dynamic scope)라고 하고, 2번의 경우는 정적 스코프 즉 lexical scope라고 한다. 렉시컬 스코프는 함수가 어디서 호출하는지가 아니라 어디에 선언하였는지에 따라 결정된다.

참고