ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스코프(Scope)
    JavaScript/Basic 2023. 1. 11. 12:54

    ## 전역 스코프 (Global scope)
    코드 어디에서든지 참조할 수 있다.


    ## 지역 스코프 (Local scope or Function-level scope)
    함수 코드 블록이 만든 스코프로 함수 자신과 하위 함수에서만 참조할 수 있다.


    var x = 'global';  // 전역변수(Global Variable)

    function foo(){
        var x = 'function scope'; 
        console.log(x);   // 지역변수 (Local Variable)
    }  
    foo();  // function scope 
    console.log(x);  // global 

    ================================ 

    변수는 선언 위치(전역 또는 지역)에 의해 스코프를 가지게 된다.
     즉, 전역에서 선언된 변수는 전역 스코프를 갖는 전역 변수이고, 
    지역(자바스크립트의 경우 함수 내부)에서 선언된 변수는 지역 스코프를 갖는 지역 변수가 된다.

    ================================================================

    대부분의 언어는 블록레벨 스코프를 갖는다. 
    JS는 let, const가 도입되기 전, 즉 var 변수만 가지고 있을 때는  함수 레벨 스코프 였는데 
    let, const가 도입된 후 블록 레벨 스코프를 가질 수 있게 됬다. 

    예를 들어 

    int main(void) {
        // block-level scope
        if (1) {
          int x = 5;
          printf("x = %d\n", x);
        }
      
        printf("x = %d\n", x); // use of undeclared identifier 'x', 
        // x는 if 블럭 안에서 선언이 됬으므로 밖에서는 사용할 수 없다. 
      
        return 0;
      }
    ================================================================

    var 변수는 함수 레벨 스코프  
    - 즉, 비블럭 레벨 스코프 라는 뜻인데 함수 밖에서 선언된 변수는 모두 전역 스코프를 갖는다 
    (코드 블록내에서 선언되더라도) 

    예시들!!! 

    1) 
    var x = 0;

        var x = 1; 
        console.log(x);   // 1
    }
    console.log(x);  // 1

    2) 





    ================================================================
    let 변수는 블록 레벨 스코프   
    let y = 0; 
    {
        let y = 1; 
        console.log(y); // 1  
    }

    console.log(y); // 0 

    ================================================================
    전역 스코프(Global Scope) 


    전역 변수의 사용은 변수 이름이 중복될 수 있고, 의도치 않은 재할당에 의한 상태 변화로 코드를 
    예측하기 어렵게 만드므로 사용을 억제하여야 한다.

    전역에 변수를 선언하면 이 변수는 어디서든지 참조할 수 있는 전역 스코프를 갖는 전역 변수가 된다. v
    ar 키워드로 선언한 전역 변수는 전역 객체(Global Object) window의 프로퍼티


    ================================================================  

    var global = 'global'; 

    function foo(){
        var local = 'local'; 
        console.log(global); 
        console.log(local);   
    }  
    foo();  
    // global 
    // local 

    console.log(global);  // global 
    console.log(local);   // al.js:46 Uncaught ReferenceError: local is not defined at al.js:46:13
    ================================================================
    예를 들어! 

    // 함수 레벨 스코프 (function -level - scope) 
    // 즉, 함수 밖에서 선언된 변수는 전역 변수 이다 


    // // 예시 1
    // if(true){
    //     var x =5; 
    // }
    // console.log(x); // 5


    // // 예시 2
    // var a = 10;  // 전역 변수 
    // (function(){
    //     var b = 20;   // 함수 안 => 지역변수 
    // })(); 

    // console.log(a);  // 10 
    // console.log(b); // "b" is not defined 



    // // 예시 3
    // var x = 10; 

    // function foo(){
    //     x = 100; 
    //     console.log(x);   
    // }

    // foo();  // 100 
    // console.log(x);  // 100 


    // var x = 10;  // 전역변수 

    // function foo(){
    //     var x = 100; 
    //     console.log(x); 

    //     function bar(){
    //         x = 1000; 
    //         console.log(x);  
    //     }  
    //     bar(); 
    // }

    // foo();  //100,  1000 
    // console.log(x);  // 10 

    var foo = function(){
        var a = 3 , b = 5; 
        var bar = function(){
            var b = 7, c = 11; 
            // 더하기전! 이 시점에서는 a는 3, b는 7, c는 11 
            a += b + c;
            // 더한후! 이 시점에서는 a는 21, b는 7, c는 11     
        };
        // 함수 밖, 이 시점에서는 a는 3, b는 5, c는 undefiend 
        bar(); 
        // bar()함수를 호출 한 후, a는 21, b는 5  

    }; 













    'JavaScript > Basic' 카테고리의 다른 글

    브라우저와 관련된 객체  (0) 2023.01.24
    arr.join('') vs str += i  (0) 2023.01.16
    JS - location 속성  (0) 2023.01.09
    JS 데이터 타입 종류  (0) 2023.01.08
    Date  (0) 2023.01.07

    댓글

Designed by Tistory.