on
전역 객체
전역 객체
* 10월 21일자 스터디 발표 내용을 토대로 작성
1. 전역 객체: 전역 객체는 특수한 형태의 객체로, 모든 객체는 이 전역 객체의 프로퍼티로 간주된다. 즉, 모든 객체의 유일한 최상위 객체를 의미한다.
브라우저 단에서는 window가, 서버(node.js)단에서는 global이 전역 객체를 지칭한다.
실행 컨텍스트에 들어가기 이전에 전역 객체는 자동으로 생성이 되며, 반드시 전역 스코프를 가지게 된다.
2. 전역 유효 범위 오염: 전역 변수와 전역 함수를 전역 객체에 선언하는 행위를 말한다. 이러한 상황에서는 변수 이름과 함수 이름이 겹치는 상황이 벌어질 수 있다.
전역 유효 범위가 오염되는 상황은 규모가 큰 파일을 다루거나, 여러 사람이 하나의 파일로 작업을 할 때 자주 일어난다.
// code1.js var global = 10; // code2.js var global = 20;
다음과 같이, 서로 다른 파일에서 똑같은 식별자로 전역 변수를 할당하면, 결국 global의 값은 20이 된다. 이는 자바스크립트의 식별자 결정 규칙에 따라 좀더 안쪽 코드에 입력된 값이 전역 변수에 할당되기 때문이다.
3. 네임스페이스 활용
네임스페이스는 변수에 쓰일 이름들을 한데 모아 충돌을 방지하고, 각각의 이름을 쓰는 변수들을 쉽게 가져다 쓰기 위해 만들어진 메커니즘이다. 하나의 전역 객체를 생성 후, 그 안에 필요한 기능들을 모두 프로퍼티로 정의한다.
// 객체 리터럴 var app = app || {}; // 프로퍼티 추가 app.name = "John"; app.age = 30; app.gender = "male";
논리합 연산자를 사용해서 app이 기존에 정의되어 있을 때는 그것을 사용하고, 그렇지 않으면 빈 객체를 app에 할당하게 된다. 이 상태에서 전역 유효 범위에서 사용하고자 하는 모든 변수와 함수들을 프로퍼티로 추가하면 app이라는 변수 하나만 전역 객체의 프로퍼티로 등록하는 구조가 가능해진다.
참고로 프로퍼티로 또다른 부분 네임스페이스를 만드는 것도 가능하다.
from http://oaat9309.tistory.com/25 by ccl(A) rewrite - 2021-10-31 17:01:31