JavaScript

[JavaScript] 변수의 유효범위

vhxpffltm 2019. 5. 19. 22:22

이 내용은 '생활코딩'에서 공부한 내용을 정리한 글이다. 

자세한 내용은 https://www.opentutorials.org/course/743 이곳에서 확인할 수 있다. 

모든 내용의 출처는 이곳이다. 다른 언어를 알고있는 상태로 공부한 내용이다.

 

보통 변수의 유효범위는 scope를 통해 알 수 있다. C/C++에서 기본적으로 함수 안에있는 것을 지역변수, main함수 밖에 있는 것을 전역변수라 하며 각 변수마다 사용할 수 있는 범위가 존재한다.

 

자바스크립트에서는 var을 사용하지 않은 변수는 전역변수가 된다. 함수안에서 var을 사용해야 지역변수가 된다. 아래의 예시와 주석을 통해 이해할 수 있다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <script>
        var scope = 'global';
        function fs(){
            scope = 'local';
            // var을 사용하지 않은 지역변수는 전역변수가 된다!!
            // 변수를 선언할 때, var을 사용하는 습관화로 지역변수로 사용하자
            // 전역변수의 값을 변경하게 됨
            document.write('함수 안 : ' + scope + '<br />');
        }
        fs();
        document.write('함수 밖 : ' + scope + '<br />');
 
 
        function a() {
            i = 0// var로 선언하여 지역변수로 만들어줘야함
        }
 
        for (var i = 0; i < 5; i++) { // i는 전역변수
            //a(); // 함수의 i는 0으로 바뀌면서 i는 전역변수를 뜻함 -> i가 계속 0이됨
// 즉 a()를 호출하면 i값은 계속 0이 된다. -> 무한루프
            document.write(i);
        }
        
 
        (function() {
            myvar = {} // 객체생성, 전역변수를 만듬
            myvar.cal = { // 객체의 속성으로 변수를 관리하기
                'left'null,
                'right'null
            }
            myvar.cor = {
                'left'null,
                'right'null
            }
            myvar.cal.left = 10;
            myvar.cal.right = 20;
        }())
        // 익명함수 : ()는 바로 실행, 이름이 없는 함수
 
        for (var i = 0; i < 1; i++) {
            var name = 'HTK'// 자바스크립트에서 변수는 함수안에서만 지역변수이다.
        }                     // for문 안에 있기때문에 지역변수가 아니다.
        document.write(name + '<br />'); //전역변수라서 실행에 문제가 없다.
 
 
        var ii = 5//전역변수
        function aa() {
            var ii = 10// 지역변수
            bb();
        }
        function bb() {
            document.write(ii); //5가 사용됨
            //함수 bb가 호출될때가 아니라, 정의될 때의 전역변수를 사용
            //ii는 정의될 때의 전역변수가 사용될 때, 정적 유효범위라고함
        }
        aa();
    </script>
    
 
</body>
</html>
 
 

 

'JavaScript' 카테고리의 다른 글

[Javascript] 함수의 호출(apply)  (0) 2019.05.27
[JavaScript] arguments 객체  (0) 2019.05.19
[JavaScript] 객체  (0) 2019.05.08
[JavaScript] 함수, 배열  (0) 2019.05.08
[JavaScript] 조건문, 반복문  (0) 2019.04.28