scope

Scope : 변수 접근 규칙에 따른 유효 범위

  • 변수는 어떠한 환경 내에서만 사용 가능하며, 프로그래밍 언어는 각각의 변수 접근규칙을 갖고 있다
  • 변수와 그 값이, 어디서부터 어디까지 유효한지를 판단하는 범위
  • JavaScript는 기본적으로, 함수가 선언되는(lexical) 동시에 자신만의 Scope를 가진다

Rule 1 : Local Scope VS Global Scope

  • 안쪽 Scope에서 바깥 변수/함수를 점근하는 것은 가능
  • 바깥쪽 Scope에서 안쪽 변수/함수를 접근하는 것은 불가능
  • Scope는 중첩이 가능

    • 함수 안에 함수를 넣을 수 있다
  • Gloval Scope는 최상단의 Scope로 전역 변수는 어디서는 접근이 가능하다
  • 지역 변수는 함수 내에서 전역 변수보다 더 높은 우선순위를 가집니다

Local Scope 안쪽에서 선언된 변수는 밖에서 사용할 수 없다

let  greeting = 'Hello';
function greetSomeone() {
  let firstName = 'Josh';
  return greeting + ' ' + firstName;
}
greetSomeone(); // "Hello Josh"
firstName // Uncaught ReferenceError: firstName is not defined
  • 예시 01

    let name = 'Heaeun';
    
    function showName() {
      let name = 'Daeun'; // 지역변수
      /*
      * 1. let 키워드를 이용해 새로 선언하였으므로,
            전역에 선언한 name과는 다른 변수이다
      * 2. showName 함수 안에서만 접근 가능
      */
      console.log(name);
    }
    
    console.log(name); // Heaeun
    showName(); // Daeun
    console.log(name); // Heaeun
  • 예시 02

    let name = 'Heaeun';
    
    function showName() {
      name = 'Daeun'; // 전역변수
      /*
       * 1. 선언(let)이 없기 때문에,
            바깥 scope에 있는 name이라는 변수를 가져온다
      */
      console.log(name); 
    }
    
    console.log(name); // Heaeun
    showName(); // Daeun 
    console.log(name); // Daeun

Rule 2 : Function Scope VS Block Scope

  • Block : 중괄호로 시작하고 끝나는 범위

    if(true) {
    console.log('i an in the block');
    }
    
    for (let i = 0; i < 10; i++) {
    console.log(i);
    }
    
    {
    console.log('it works');
    }

var 키워드 VS let 키워드

  • 변수를 정의하는 또다른 키워드 var

    • JavaScript는 기본적으로, 함수 단위로 자신만의 Scope를 가진다. : var 키워드 (old way)
    • 그러나, Block 단위로 Scope를 구분했을 때에 예측하기 쉬운 코드를 작성할 수 있다. : let 키워드

const 키워드

  • 값이 변하지 않는 변수, 즉 상수를 정의할 때 사용하는 키워드

    • let 키워드와 동일하게 Block Scope를 따른다
    • 값을 재정의하려고 하면 TypeError를 낸다.

Written by@Heaeun
코드리뷰, TDD, 함께 자라기를 지향하는 프론트엔드 개발자입니다

GitHub