JavaScript 변수의 역할 영역 전체 분석
/* 코드 1 */
var scope = "global ";
function checkScope() {
var scope = "local ";
function childCheck() {
var scope = "childLocal ";
document.write(scope);
}
function childUndefined() {
document.write(scope);
var scope;
}
function childOverride() {
scope = "childOverride ";
document.write(scope);
}
document.write(scope); // "local"
childCheck(); // "childLocal"
childUndefined(); // "undefined"
childOverride(); // "childOverride"
document.write(scope); // "childOverride"
}
checkScope(); // "local childLocal undefinedchildOverride childOverride"
document.write(scope); // "global "
전역 작용 역 과 국부 작용 역 전역 (global) 변수의 작용 역 은 전역 적 이 고 자 바스 크 립 트 에서 곳곳에 정의 가 있다.한편, 함수 내부 성명 의 변 수 는 국부 (local) 변수 이 고 그 역할 영역 은 국부 적 이 며 함수 체 내부 에서 만 정의 된다.아래 의 수출 독자 에 게 는 의외 라 고 생각 하지 않 을 것 이다. / * 코드 2 */
var scope = "global";
function checkScope() {
var scope = "local";
document.write(scope);
}
checkScope(); // "local"
document.write(scope); // "global"
전역 변수 역할 영역 에서 변 수 를 사용 하면 var 문 구 를 사용 하지 않 아 도 됩 니 다. 그러나 국부 변 수 는 반드시 var 문 구 를 사용 해 야 합 니 다. 그렇지 않 으 면 전역 변수 에 대한 참조 로 볼 수 있 습 니 다.다음 코드 를 보십시오: / * 코드 3 */
var scope = "global";
function checkScope() {
scope = "local";
document.write(scope);
}
checkScope(); // "local"
document.write(scope); // "local"
블록 역할 영역 이 없 는 자바 script 은 블록 급 역할 영역 이 없 으 며 함수 에서 설명 하 는 변 수 는 전체 함수 에서 정의 되 어 있 습 니 다.아래 의 코드 는 생소 한 독자 들 에 게 상당히 의외 일 수 있 습 니 다. / * 코드 4 */
var scope = "global";
function checkScope() {
document.write(scope); // 4.1
var scope = "local"; // 4.2
document.write(scope);
}
checkScope(); // "undefinedlocal"
문장 4.1 (var scope = "local";) 성명 의 변 수 는 전체 checkScope 함수 역할 영역 에서 유효 하기 때문에 문장 4.2 (document. write (scope);) 에서 실 행 될 때 scope 는 부분 변 수 를 인용 합 니 다. 이때 부분 변 수 는 scope 가 정의 되 지 않 았 기 때문에 출력 "undefined" 입 니 다.따라서 좋 은 프로 그래 밍 습관 은 모든 변수 성명 을 함수 의 시작 에 집중 하 는 것 이다.
상술 한 내용 을 이해 한 후에 독자 가 코드 1 을 다시 보면 곤 혹 스 럽 지 않 을 것 이다.대상 의 속성 변수 대상 의 속성 변 수 는 쉽게 이해 할 수 있 습 니 다. 아래 코드 를 보면 독자 들 이 의심 하지 않 을 것 입 니 다. / * 코드 5 */
var scope = "global ";
var obj = new Object();
obj.scope = "object ";
obj.checkScope = function () {
var scope = "loacl ";
document.write(scope); // "loacl"
document.write(this.scope); // "object"
document.write(window.scope); // "global"
}
obj.checkScope(); // "loacl object global"
역할 영역 이란 이 변 수 는 코드 블록 에서 의 유효 범위 입 니 다.자 바스 크 립 트 역할 영역 을 이해 하지 못 하면 코드 를 디 버 깅 할 때 어 려 울 수 있 습 니 다.
함수 에서 var 로 변 수 를 설명 하면 이 변수의 역할 도 메 인 은 이 함수 내부 에 만 국한 되 고 함수 밖의 코드 는 이 변 수 를 방문 할 수 없습니다.이 함수 에서 함 수 를 하나 더 설명 하면 이 내부 함수 도 이 변 수 를 방문 할 수 있 습 니 다.
반대로 변 수 를 설명 할 때 var 를 사용 하지 않 으 면 이 변수의 역할 영역 은 이 함수 에 국한 되 지 않 습 니 다.자 바스 크 립 트 엔진 은 이 변수 가 정의 되 었 는 지 전역 적 으로 검사 합 니 다.만약 이 변수 가 정의 되 지 않 았 다 면, 그것 은 전역 변수 로 정 의 될 것 이다.
함수 가 같은 역할 영역 에 접근 할 수 있 는 변수:
var foo = 'hello';
var sayHello = function() {
console.log(foo);
};
sayHello(); // logs 'hello'
console.log(foo); // also logs 'hello'
변수 역할 영역 이외 의 코드 는 이 변수 에 접근 할 수 없습니다.
var sayHello = function() {
var foo = 'hello';
console.log(foo);
};
sayHello(); // logs 'hello'
console.log(foo); // doesn't log anything
도 메 인 이름 이 같은 변 수 를 사용 하지 않 고 값 이 다 릅 니 다:
var foo = 'world';
var sayHello = function() {
var foo = 'hello';
console.log(foo);
};
sayHello(); // logs 'hello'
console.log(foo); // logs 'world'
함수 가 정 해진 후에 함수 내 변수 값 의 변 화 를 볼 수 있 습 니 다.
var myFunction = function() {
var foo = 'hello';
var myFn = function() {
console.log(foo);
};
foo = 'world';
return myFn;
};
var f = myFunction();
f(); // logs 'world' -- haha
역할 영역 도 통과 - 폐쇄
//
(function() {
var baz = 1;
var bim = function() { alert(baz); };
bar = function() { alert(baz); };
})();
console.log(baz); // baz
bar(); // bar var
// bar ; ,
// bar baz ,
// bar baz
// bar
bim(); // bim ,
//
종합 하 다
역할 영역 이란 이 변 수 는 코드 블록 에서 의 유효 범위 입 니 다.자 바스 크 립 트 역할 영역 을 이해 하지 못 하면 코드 를 디 버 깅 할 때 어 려 울 수 있 습 니 다.
함수 에서 var 로 변 수 를 설명 하면 이 변수의 역할 도 메 인 은 이 함수 내부 에 만 국한 되 고 함수 밖의 코드 는 이 변 수 를 방문 할 수 없습니다.이 함수 에서 함 수 를 하나 더 설명 하면 이 내부 함수 도 이 변 수 를 방문 할 수 있 습 니 다.
반대로 변 수 를 설명 할 때 var 를 사용 하지 않 으 면 이 변수의 역할 영역 은 이 함수 에 국한 되 지 않 습 니 다.자 바스 크 립 트 엔진 은 이 변수 가 정의 되 었 는 지 전역 적 으로 검사 합 니 다.만약 이 변수 가 정의 되 지 않 았 다 면, 그것 은 전역 변수 로 정 의 될 것 이다.
함수 가 같은 역할 영역 에 접근 할 수 있 는 변수:
var foo = 'hello';
var sayHello = function() {
console.log(foo);
};
sayHello(); // logs 'hello'
console.log(foo); // also logs 'hello'
변수 역할 영역 이외 의 코드 는 이 변수 에 접근 할 수 없습니다.
var sayHello = function() {
var foo = 'hello';
console.log(foo);
};
sayHello(); // logs 'hello'
console.log(foo); // doesn't log anything
도 메 인 이름 이 같은 변 수 를 사용 하지 않 고 값 이 다 릅 니 다:
var foo = 'world';
var sayHello = function() {
var foo = 'hello';
console.log(foo);
};
sayHello(); // logs 'hello'
console.log(foo); // logs 'world'
함수 가 정 해진 후에 함수 내 변수 값 의 변 화 를 볼 수 있 습 니 다.
var myFunction = function() {
var foo = 'hello';
var myFn = function() {
console.log(foo);
};
foo = 'world';
return myFn;
};
var f = myFunction();
f(); // logs 'world' -- haha
역할 영역 도 통과 - 폐쇄
//
(function() {
var baz = 1;
var bim = function() { alert(baz); };
bar = function() { alert(baz); };
})();
console.log(baz); // baz
bar(); // bar var
// bar ; ,
// bar baz ,
// bar baz
// bar
bim(); // bim ,
//
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.