전역 객체는 코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체이며, 어떤 객체에도 속하지 않은 최상위 객체이다.
전역 객체는 개발자가 의도적으로 생성할 수 없다. 즉, 전역 객체를 생성할 수 있는 생성자 함수가 제공되지 않는다.
전역 객체는 표준 내장 객체(Object, String, Number, Boolean, Function, Array 등)와 환경에 따른 호스트 객체(클라이언트 Web API 또는 Node.js의 호스트 API), 그리고 var 키워드로 선언한 전역 변수를 프로퍼티로 갖는다.
전역 객체의 프로퍼티를 참조할 때 window
또는 global
을 생략할 수 있다.
// 문자열 'F'를 16진수로 해석하여 16진수로 변환하여 반환한다.
window.parseInt('F', 16); // 15
// window.parseInt로 호출할 수 있다.
parseInt('F', 16); // 15
window.parseInt === parseInt; // true
브라우저 환경의 모든 자바스크립트 코드는 하나의 전역 객체 window
를 공유한다. 다시 말해 여러 개의 <script>
태그를 통해 자바스크립트 코드를 분리해도 하나의 전역 객체 window
를 공유한다.
var 키워드로 선언한 전역 변수와 선언하지 않은 변수에 값을 할당한 암묵적 전역, 그리고 전역 함수는 전역 프로퍼티가 된다.
// var 키워드로 선언한 전역 변수
var foo = 1;
console.log(window.foo); // 1
// 선언하지 않은 변수에 값을 암묵적 전역, bar는 전역 변수가 아니라 전역 객체의 프로퍼티다.
bar = 2; // window.bar = 2
console.log(window.bar); // 2
// 전역 함수
function baz() {
return 3;
}
console.log(window.baz); // 3
let foo = 123;
console.log(window.foo); // undefined
즉, 전역 객체는 계층적 구조상 어떤 객체에도 속하지 않은 모든 내장 객체(표준 내장 객체와 호스트 객체)의 최상위 객체다. 그러나 전역 객체가 최상위 객체라는 것은 프로토타입 상속 관계상에서 최상위 객체라는 의미가 아니다.
전역 객체 자신은 어떤 객체의 프로퍼티도 아니며 객체의 계층적 구조상 표준 빌트인 객체와 호스트 객체의 프로퍼티로 소유한다는 것을 말한다.