간단한 JavaScript 문제 - Scope
Scope 는 어떤 변수나 객체가 어디까지 유효한가에 대한 범위입니다.
전역변수의 scope 는 당연히 전체 프로그램이고, 지역변수는 함수 혹은 메소드 등 자신이 속한 부분에 대해서만 유효합니다.
JavaScript 에도 당연히 scope가 존재합니다. ^^ 간단히 다음 문제를 보고 어떤 결과가 출력될지 한번 예상해보세요.
1 var yangpa5 = "Marry me"; 2 function print_value() { 3 document.writeln(yangpa5); 4 var yangpa5 = "나 때문에"; 5 document.writeln(yangpa5); 6 7 function nested() { 8 document.writeln(yangpa5); 9 yangpa5 = "사랑...그게뭔데"; 10 document.writeln(yangpa5); 11 var yangpa5 = "한 사람"; 12 document.writeln(yangpa5); 13 } 14 nested(); 15 } 16 print_value();
정답을 보기 전에 결과가 어떻게 나올지부터 예상해보세요. ^^
.
.
.
.
undefined 나 때문에 undefined 사랑...그게뭔데 한사람
결과가 충분히 이해가 되시나요? (위 공백을 드래그해서 선택하세요)
지역변수를 var 로 선언하게 되면 지역변수가 적용되는 scope 내에서 변수가 선언되기 전까지는 해당 변수는 undefined 가 되는 것입니다. 설사 이름이 같은 전역변수가 있다해도 scope 내에서는 무시되는거죠. 재밌는 것은 nested 함수에서 보듯이 꼭 var 로 선언하기 전이라도 단지 값을 할당해주는 것만으로도 변수가 선언된 것과 같은 효과가 있다는 겁니다. 아… nested 함수에서 var yangpa5 가 없었다면 결과가 달라졌으리라는 것은… 아시겠죠? ^^
답글이 2개 등록되어있습니다.
