본문 바로가기
JS/JS-basic

JS - 변수의 유효범위 , 클로저

by 임혁진 2024. 1. 28.

변수의 유효범위의 차이

지역변수 - 함수안에서 선언되어 함수안에서만 사용

전역변수 - 함수밖에서도 유효한  값

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>

        var num1 = 10;
        if(num1 === 10) {
            var num1 = 100;
            var num2 = 200;
        }

        console.log(num1);
        console.log(num2);

        for(var i = 1; i <= 10; i++) {
            console.log("hello world");
        }
        console.log(i) //11 - i가 살아있음

        //////////////지역과 전역을 나누는 기준은 함수///////////////
        function add() {
            var x = 1; //지역변수
        }

        add();
        //console.log(x);

        console.log("--------------------------------------------------")
        //let변수 - es6
        //let - 스코프가 중괄호, 변수의 중복 선언 x

        let a = 10;
        //let a = 20;
        if(a === 10) {
            let b = 100; //지역변수
        }
        console.log(b);





    </script>

</body>
</html>

 

클로저

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        //클로저 라는 개념 몰라도, 일단 사용하는데 큰 문제 없음
        //렉시컬스코프 - 함수가 선언된 위치에 따라서 변수참조가 달라진다.

        // 1st
        // var a = 1;
        // function func1() {
        //     a = 10;
        //     console.log(a); //10
        // }
        // func1();

        /////////////////////////////////////////////////////////////////////
        // var b = 1;
        // function func1() {
        //     var b = 100;
        //     func2();
        // }

        // function func2() {
        //     console.log(b); //1 - 
        // }
        // func1();
        ///////////////////////////////////////////////////////////////////
        // 3nd
        // var c = 1;
        // function func1() {
        //     var c = 100;

        //     func2();
        //     function func2() {
        //         console.log(c); //100 - 함수 선언 위치에 따라 참조하는 변수가 달라진다.
        //     }

        // }
        // func1();

        ////////////////////////////////////////////////////////////////////////
        //클로저를 사용해서 a변수를 함수 밖에서 사용할 수 있도록 할거야
        
        //클로저는 내부에 선언된 함수를 이용해서 외부함수 바깥에서 접근할 수 있는 환경을 만들어준다.
        //getter, setter

        // function aaa() {
        //     var a = 1;

        //     // var x = function() {
        //     //     return a;
        //     // }
        //     // return x;
        //     return function() {
        //         return a;
        //     }

        // } //a의 사용범위는 여기서 끝(지역변수)

        // var f = aaa()
        // console.log( f() )
        //console.log(f)
        
        /////////////////////////////////////////////////////////////////////////////////////////
        // function bbb() {
        //     var count = 0;
        //     return ++count;
        // }
        // console.log( bbb()  ) // 1
        // console.log( bbb()  ) // 1
        // console.log( bbb()  ) // 1
        // console.log( bbb()  ) // 1
        // console.log( bbb()  ) // 1
        
        function bbb() {
            var count = 0; //private변수
            return function() {
                return ++count;
            }
        }

        var ff = bbb()
        console.log( ff() ) //1
        console.log( ff() ) //2
        console.log( ff() ) //3
        console.log( ff() ) //4
        console.log( ff() ) //5






    </script>


</body>
</html>

'JS > JS-basic' 카테고리의 다른 글

JS - 객체  (0) 2024.01.28
JS -클로저 은닉  (0) 2024.01.28
JS-함수,익명함수,즉시실행함수,  (0) 2024.01.28
JS - 반복문 , 객체 담기  (1) 2024.01.28
JS -조건문  (0) 2024.01.28