변수의 범위는 변수의 가시성을 말하며, 수명주기(생존 기간)는 변수를 다른 관점에서 살펴봅니다.
JS에서 변수의 범위는 전역 변수와 지역 변수로 구분됩니다. 함수 내에서 정의된 변수를 지역 변수, 함수 외부에서 정의된 변수를 전역 변수라고 합니다. ("함수 외부의 것을 전역 변수라고 합니다"는 상대적입니다. 여기서 논의되는 전제는 var로 명시적으로 선언된 변수입니다. 함수 내에서 var 없이 정의된 변수는 기본적으로 전역 변수입니다. 물론 var 없이 변수를 선언하는 것은 눈살을 찌푸리게 합니다. ).
다음과 같이 코드 코드를 복사합니다.
var glob = 4; //함수 외부에 전역 변수를 선언합니다.
함수 재미() {
var height = 20; //함수 내 var 선언은 지역 변수입니다.
Weight = 50; //함수에서 var 없이 선언된 것은 전역 변수입니다.
}
재미있는();
경고(무게);
JS에는 중괄호 {}로 묶인 블록 수준 범위가 없습니다. 자바에는 있습니다. 기본 메소드에 다음 코드를 작성합니다.
다음과 같이 코드 코드를 복사합니다.
공개 정적 무효 메인(문자열... args) {
for(int i=0;i<5;i++) {
}
{
정수 j=10;
}
정수 z = 20;
System.out.println(i); // i가 표시되지 않습니다. 구문 분석 중에 오류가 보고됩니다. 즉, 컴파일이 통과되지 않습니다.
System.out.println(j); // j는 표시되지 않으며 구문 분석 중에 오류가 보고됩니다. 즉, 컴파일이 통과되지 않습니다.
System.out.println(z); // z가 표시되고 출력 20
}
하지만 JS에서는
다음과 같이 코드 코드를 복사합니다.
for(var i=0;i<5;i++) {
}
var obj = {이름:"백합"};
for(obj의 var 속성) {
}
{
var j=10;
}
Alert(i);//출력 4, 블록 수준 범위 없음
Alert(attr); //출력 이름, 블록 수준 범위 없음
Alert(j);//출력 10, 블록 수준 범위 없음
이는 또한 전역 범위에서 변수를 선언하는 동안 for 루프를 사용하지 않는 것을 보여줍니다. 그렇지 않으면 전역 명명 범위가 오염될 수 있습니다.
물론 JS1.7에서는 for 문의 범위에만 적용되는 변수 선언을 위한 let 키워드를 제안했습니다(https://developer.mozilla.org/cn/New_in_JavaScript_1.7 참조).
다음과 같이 코드 코드를 복사합니다.
for(let i=0;i<5;i++) {
//할 일
}
Alert(i);//실행 중 오류가 발생하여 i가 정의되지 않았음을 나타냅니다.
JS1.7은 <script type="application/javascript;version=1.7"/></script>과 같이 참조되어야 합니다.
ps: firefox2+는 JS1.7을 구현합니다.