Scope 복습

마데슾 : My Dev Space·2019년 10월 18일
0

[CODESTATES]PRE

목록 보기
17/19

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

    예시 - 1 )

     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

    예시 - 2 )

    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를 낸다.
      `
profile
👩🏻‍💻 🚀

0개의 댓글