/* 코드 1 */
var 범위 = "global" ;
function checkScope() {
var range = "local ";
function childCheck() {
var range = "childLocal "
document.write(scope);
}
function childUndefine() {
document.write(scope);
var range
}
function childOverride() {
scope = "childOverride"; 🎜>document .write(scope)
}
document.write(scope); //"local" 출력
childCheck(); //"childLocal" 출력
childUndefine(); /Output" undefine"
childOverride(); //"childOverride" 출력
document.write(scope); //"childOverride" 출력
}
checkScope(); childLocal undefinedchildOverride childOverride "
document.write(scope); //"전역" 출력
전역 범위 및 로컬 범위
전역(전역) 변수의 범위는 Javascript에서 전역입니다. 어디에나 정의가 있습니다. 함수 내부에 선언된 변수는 지역 변수이고 해당 범위는 지역이며 함수 본문 내부에서만 정의됩니다. 다음 결과는 독자들에게 놀라운 일이 아닙니다.
/* 코드 2 */
varscope = "global";
function checkScope() {
varscope = "local";
document.write(scope);
checkScope(); local"
document.write(scope); //"global" 출력
전역 변수 범위에서는 var 문 없이도 변수를 사용할 수 있지만 선언 시에는 var 문을 사용해야 합니다. 지역 변수, 그렇지 않으면 전역 변수에 대한 참조로 처리됩니다. 아래 코드를 보세요.
/* 코드 3 */
var range = "global";
function checkScope() {
scope = "local";
document.write(scope)
}
checkScope() ; //output" local"
document.write(scope); //"local" 출력
블록 범위 없음
Javascript에는 블록 수준 범위가 없습니다. 함수는 함수 전체에 모두 정의되어 있습니다. 다음 코드는 익숙하지 않은 독자에게는 의외일 수 있습니다.
/* 코드 4 */
varscope = "global";
function checkScope() {
document.write(scope); // 명령문 4.1
varscope = "local"; /Statement 4.2
document.write(scope);
}
checkScope(); // "undefinelocal" 출력
Statement 4.1로 인해(varscope = "local" ; ) 선언된 변수는 checkScope 함수 전체 범위 내에서 유효하므로 4.2문(document.write(scope); )이 실행되면 범위는 지역 변수를 참조하며, 아직 지역 변수 범위는 아직 정의되지 않았습니다. 이므로 "정의되지 않음"이 출력됩니다. 따라서 좋은 프로그래밍 방법은 함수 시작 부분에서 모든 변수 선언을 그룹화하는 것입니다.
위의 내용을 이해하신 후, 코드 1을 보실 때 독자분들은 혼동하지 마시기 바랍니다.
객체의 속성변수
객체의 속성변수는 비교적 이해하기 쉽습니다. 아래 코드를 보시면 독자분들이 헷갈리지 않으실 겁니다.
/* 코드 5 */
var 범위 = "전역";
var obj = new Object();
obj.scope = "객체";
obj.checkScope = function() {
var 범위 = "loacl";
document.write(scope); //"loacl" 출력
document.write(this.scope); //"객체" 출력
document.write(window.scope); global"
}
obj.checkScope(); //"loacl object global" 출력