프론트엔드/JavaScript

자바스크립트의 전역 객체(Global object)

ksge7 2020. 9. 14. 01:45
<body>
    <script>

        var name = "철수";  // 전역 변수 name 선언
        
        function call(name){  // 전역 함수 call 선언
            console.log(name);
        }

        console.log(name);  // "철수" 출력
        call("철수");  // "철수" 출력

    </script>
</body>

 

위와 같은 예시를 보면 전역 변수, 전역 함수를 선언하고 실행까지 하는 것을 볼 수 있다.

 

일반적으로 함수명, 변수명을 이용하면 해당 함수와 변수에 설정된 데이터를 이용할 수 있다.

 

그렇다면 다음은 어떨까?

 

<body>
    <script>

        var name = "철수";  // 전역 변수 "철수" 선언
        function call(name){  // 전역 함수 "call" 선언
            console.log(name);
        }

        console.log(window.name);  // "철수" 출력
        window.call("철수");  // "철수" 출력

    </script>
</body>

 

변수와 함수를 호출할 때 앞에 window라는 단어가 붙었다. 그러나 실행은 똑같이 된다.

 

이게 무슨 뜻일까? 자세히 보면 그것을 알 수 있다.

 

<body>
    <script>

        let name = {  // 리터럴 객체 name 생성
            a: "철수",
            b: "영희"
        }

        console.log(name.a);  // "철수" 출력
        console.log(name.b);  // "영희" 출력

    </script>
</body>

 

우리는 지금까지 객체를 만들고 그 안에 프로퍼티를 불러올 때 점 ( . )을 찍었던 것을 기억할 것이다.

 

위의 예시를 봐도 그렇다.

 

즉 함수나 변수를 점을 찍어서 불러올 수 있다는 것은 window의 정체는 객체란 것을 알 수 있다.

 

window란 자바스크립트가 브라우저에서 돌아갈 때 모든 객체들의 최상위 객체로서 전역객체라(Global Object)라고도 부른다.

 

전역객체는 눈에 보이지 않고 우리가 설정해주지 않았다.

 

그리고 각종 함수, 변수를 호출할 때 window란 것이 생략되어있다.

 

하지만 이는 사용상의 편의를 위한 것으로 실제로는 엄연히 존재하고 있는 객체다.

 

우리가 별도로 만들지 않았고 호출하지 않았음에도 자바스크립트에서 우리가 설정하는 전역 함수, 전역 변수는 모두 이 전역 객체의 프로퍼티로서 설정되는 것이다.

 

그리고 이러한 전역 객체를 자바스크립트 코드 상에선 window로 표기하고 있다.

 

그리고 다른 언어에선 window 이외에도 다른 명칭으로 지칭한다.

 

하지만 결국 둘은 같은 전역 객체다.