티스토리 뷰

전역 변수와 지역 변수

 

결과는 global이다. 

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>생활코딩</title>
</head>

<body>
    <script>
        var vscope = 'global';

        function fscope() {
            alert(vscope);
        }
        fscope();
    </script>
</body>

</html>

함수의 정의를 바꿔보자. 로컬을 경고창에 출력하게 된다.

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>생활코딩</title>
</head>

<body>
    <script>
        var vscope = 'global';

        function fscope() {
            var vscope = 'local';
            alert('함수안 ' + vscope);
        }
        fscope();
        alert('함수밖 ' + vscope);
    </script>
</body>

</html>

함수 안 지역변수와 함수 밖 전역변수에 관한 설명이다.  영어론 local, global

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>생활코딩</title>
</head>

<body>
    <script>
        var vscope = 'global';

        function fscope() {
            vscope = 'local';
            alert('함수안' + vscope);
        }
        fscope();
        alert('함수밖' + vscope);
    </script>
</body>

</html>
<body>
    <script>
        var vscope = 'global';

        function fscope() {
            var vscope = 'local';
        }
        fscope ();
        alert(vscope);
    </script>
</body>
    <script>
        var vscope = 'global';

        function fscope() {
            vscope = 'local';
        }
        fscope ();
        alert(vscope);
    </script>

지역 = local

전역 = global

 

var가 없을 경우 전역변수를 출력

 

전역변수를 제대로 사용할 수 없다면 지역변수를 써야합니다.

전역 변수는 쓰면 안된다는 인식이 존재한다.

 

 

유효범위의 효용

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>생활코딩</title>
</head>

<body>
    <script>
        function a() {
            var i = 0;
        }
        for (var i = 0; i < 5; i++) {
            a();
            document.write(i);
        }
    </script>
</body>

</html>

답 : 01234

<script>
        function a() {
            i = 0;
        }
        for (var i = 0; i < 5; i++) {
            a();
            document.write(i);
        }
    </script>

var을 제거하면 브라우저는 무한로딩 후 다운된다.

같은 이름의 변수를 중복해서 사용했지만 각각의 취지가 다를때 문제가 발생할 수 있다.

 

이런 의미에서 유효범위를 만들게 되었다.

 

전역변수의 사용

어쩔 수 없이 전역변수를 사용해야할때

 

<!DOCTYPE html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>생활코딩</title>
</head>

<body>
    <script>
        var MYAPP = {}
        MYAPP.calculator = {
            'left': null,
            'right': null
        }
        MYAPP.coordinate = {
            'left': null,
            'right': null
        }

        MYAPP.calculator.left = 10;
        MYAPP.calculator.right = 20;

        function sum() {
            return MYAPP.calculator.left + MYAPP.calculator.right;
        }
        document.write(sum());
    </script>
</body>

</html>

myapp이란 전역변수 하나만 생성을하고 변수하나에 값을 넣게 된다. 

전역변수는 절대로 이름이 충돌하지 않도록하는것이 핵심이다.

 

전역 변수를 사용하지 않는 방법

 

<script>
        (function () {
            var MYAPP = {}
            MYAPP.calculator = {
                'left': null,
                'right': null
            }
            MYAPP.coordinate = {
                'left': null,
                'right': null
            }
            MYAPP.calculator.left = 10;
            MYAPP.calculator.right = 20;

            function sum() {
                return MYAPP.calculator.left + MYAPP.calculator.right;
            }
            document.write(sum());
        }())
    </script>

function이란 함수를 이용해서 감싸서 사용할 수 있다. 더이상 전역 변수가 아닌 함수의 지역변수가 된것이다.

 

<script>
        for (var i = 0; i < 1; i++) {
            var name = 'coding everybody';
        }
        alert(name);
</script>

자바에서 헷갈릴까봐 설명한 영상 패스

 

정적 유효범위

 

    <script>
        var i = 5;

        function a() {
            var i = 10;
            b();
        }

        function b() {
            document.write(i);
        }

        a();
    </script>

값은 5이다.

'코딩 공부 > 생활 코딩' 카테고리의 다른 글

생활 코딩 - 클로저  (0) 2021.08.18
생활 코딩 - 값으로서의 함수와 콜백  (0) 2021.08.18
생활 코딩 - 객체  (4) 2021.08.17
생활 코딩 - 배열  (1) 2021.08.17
생활 코딩 - 함수  (0) 2021.08.16
댓글
© 2022 chanchaning