모든 자바스크립트는 실행환경에서 전역 객체(global object)가 존재한다.

변수에 값을 assign 할 경우 var 선언을 하지 않으면 전역 변수로 생성된다.


myglobal = "hello";    // 안티패턴 myglobal : 암묵적 전역 변수
console.log(myglobal);           // "hello"
console.log(window.myglobal);    // "hello"
console.log(window["myglobal"];  // "hello"
console.log(this.myglobal);      // "hello"


실수하기 쉬운 전역변수 선언

function sum(x, y) {
	// 안티 패턴 result : 암묵적 전역
	result = x + y;
	return result;
}

//안티패턴 b : 암묵적 전역 변수
function foo() {
	var a = b = 0;
}


전역변수의 문제점



  • 광고같은 서드파티 스크립트들로인해 중요한 변수가 덮어쓰여지거나 삭제 될 수 있다.


 위의 코드는 엄밀히 말하면 전역 객체에 변수가 아닌 프로퍼티가 result가 추가되는 것이다. (var 선언이 없기 때문)

프로퍼티는 delete 연산자로 삭제 가능하지만 변수는 불가능 하므로 주의해야 한다.


예를들어, 함수내에서 살아있어야 하는 변수를 전역 프로퍼티로 잘못 생성하면 서드파티 코드에서 우연히 삭제할 가능성이 있기 때문이다.







'WEB > javascript' 카테고리의 다른 글

자바스크립트 리터럴 표기법  (0) 2012.07.22
eval() 안전하게 사용하는 방법  (0) 2012.07.22
호이스팅(hoisting): 분산된 var 선언의 문제점  (0) 2012.07.12
strict mode  (0) 2012.07.10
객체지향 언어  (0) 2012.07.09

+ Recent posts