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 가 없었다면 결과가 달라졌으리라는 것은... 아시겠죠? ^^
항상 고니님 글 잘 보고 다닙니다 ㅋㅋ
Dinamic Link와 Static Link를 고려한 답을 준비했는데 아니었네요 -.-;;;