간단한 JavaScript 문제 – Scope

Scope 는 어떤 변수나 객체가 어디까지 유효한가에 대한 범위입니다.
전역변수의 scope 는 당연히 전체 프로그램이고, 지역변수는 함수 혹은 메소드 등 자신이 속한 부분에 대해서만 유효합니다.

JavaScript 에도 당연히 scope가 존재합니다. ^^ 간단히 다음 문제를 보고 어떤 결과가 출력될지 한번 예상해보세요.

var yangpa5 = "Marry me";

function print_value() {
	document.writeln(yangpa5);

	var yangpa5 = "나 때문에";
	document.writeln(yangpa5);

	function nested() {
		document.writeln(yangpa5);

		yangpa5 = "사랑...그게뭔데";
		document.writeln(yangpa5);

		var yangpa5 = "한 사람";
		document.writeln(yangpa5);
	}
	nested();
}
print_value();

정답을 보기 전에 결과가 어떻게 나올지부터 예상해보세요. ^^

.

.

.

.

undefined
나 때문에
undefined
사랑...그게뭔데
한사람

결과가 충분히 이해가 되시나요? (위 공백을 드래그해서 선택하세요)

지역변수를 var 로 선언하게 되면 지역변수가 적용되는 scope 내에서 변수가 선언되기 전까지는 해당 변수는 undefined 가 되는 것입니다. 설사 이름이 같은 전역변수가 있다해도 scope 내에서는 무시되는거죠.
재밌는 것은 nested 함수에서 보듯이 꼭 var 로 선언하기 전이라도 단지 값을 할당해주는 것만으로도 변수가 선언된 것과 같은 효과가 있다는 겁니다.
아… nested 함수에서 var yangpa5 가 없었다면 결과가 달라졌으리라는 것은… 아시겠죠? ^^

댓글을 남겨주세요