>  기사  >  웹 프론트엔드  >  JavaScript 연구 노트 (1) 변수의 수명주기

JavaScript 연구 노트 (1) 변수의 수명주기

黄舟
黄舟원래의
2016-12-19 17:30:181412검색

변수의 수명주기를 범위라고도 하는데, 이는 프로그램 내에서 변수가 유효한 범위를 말합니다. 변수는 범위에 따라 전역변수와 지역변수로 나눌 수 있습니다.
1. 전역 변수의 범위는 전역입니다. 즉, 전역 변수는 전체 JavaScript 프로그램의 모든 곳에 있습니다.
2. 함수 내부에 선언된 변수는 함수 내부에서만 작동합니다. 이러한 변수는 지역 변수이고 해당 범위는 지역입니다. 함수의 매개변수도 지역적이며 함수 내에서만 작동합니다.
인터넷에서 "Javascript에서 전역 변수를 선언하는 방법에는 두 가지가 있습니다. 1. 변수를 선언할 때 var 키워드를 사용하지 마세요. 2. 함수 외부에서 변수를 선언할 때 첫 번째 방법을 사용하세요"라는 글을 자주 봅니다. 변수 선언 함수 내에서도 변수는 여전히 전역 변수입니다. 두 번째 방법을 사용하여 변수를 선언하는 경우 var 키워드를 사용하더라도 선언된 변수도 전역 변수입니다." 그것이 옳은지 그른지 알 수 있습니다. 다음 예를 참조하세요.

1 & lt; script type = "text/javascript" & gt;
2 var v01 = "나는 전역 변수 v01입니다." // VAR 키워드를 사용하여 선언된 전역 변수
3 v02 = " I am me is 글로벌 변수 v02 "; // VAR 키워드를 사용하지 않는 글로벌 변수
4 Function Fun1 () {
5 Alert (v01); // 출력" I am a 글로벌 변수 v01 "
6 경고 (6 경고 (v02); // 출력 "I는 글로벌 변수 v02"
7;; v02 "
15" 19} 2 var v01 = "나는 전역 변수 v01입니다."; //var 키워드를 사용하여 선언된 전역 변수
3 v02 = "나는 전역 변수 v02입니다." ; //전역 변수 var 키워드를 사용하여 선언되지 않음
4 function fun1(){
5 Alert(v01); //output "나는 전역 변수 v01입니다."
6 Alert(v02); 전역 변수 v02" }
11 12 Function Fun2 () {
13 Alert (v01); // 출력 "나는 전역 변수 v01입니다"
14 Alert (v02); // "나는 전역 변수 v02입니다" 15                                                                                                                                                           19 }
20 //두 함수 모두
21 fun1()
22 fun2();
23 < ;/ script>
하하, 이번에 드디어 프로그램이 저희 원래 아이디어를 따라 구현하게 되었는데, 이번에는 꼭 해보고 요약해보겠습니다.
함수 내부에서 전역변수를 선언한다면, 즉 변수를 선언할 때 var 키워드를 사용하지 않고, 다른 곳에서 변수를 사용할 때에는 반드시 함수가 호출되었는지 확인해야 하므로 실제로 전역변수를 사용하고 싶다면 변수 또는 함수 외부에서 선언하는 것이 좋습니다
또 한 가지 주목할 점은 JavaScript 변수 범위에는 명령문 블록 개념이 없다는 점입니다. for 루프 내부에서 선언되어 외부에서 사용할 수 없는 JAVA 변수와는 다릅니다. for 루프를 살펴보세요.
1 function test(){
2 for(var i =0; i <20; i++){
3 document.write(i+"< BR>");
4                                                                            }
8 경고(j); // 출력 : "for 문 안에 선언했습니다."
9 }
10 test();
추가로 , 쉽게 오류를 일으킬 수 있는 다른 곳이 있습니다.
1 var strTest = "Global Variable"
5 }
6 test1(); 먼저 함수 외부에서 전역 변수를 선언한 다음 함수 내부에서 이를 경고하고 마지막으로 전역 변수와 이름이 같은 지역 변수가 있지만 6줄만 있는 이 작은 프로그램은 그렇지 않습니다. 상상한 대로 "오류가 있는지 확인"이 출력되지만 정의되지 않은 결과가 출력됩니다. 하하, "JavaScript"에는 정말 함정이 있는 것 같습니다.
오랫동안 온라인에서 검색하다가 다음 문장을 발견했습니다.
JavaScript가 해석된 스크립팅 언어라는 것은 누구나 알고 있습니다. JavaScript가 실행되면 먼저 모든 변수 선언을 검색하고 정의되지 않은 초기 값으로 변수를 생성합니다. 변수가 선언될 때 값이 있으면 변수는 여전히 정의되지 않은 값으로 초기화되고 선언 라인이 실행될 때만 선언된 값으로 대체됩니다. 이것은 또한 위 프로그램을 설명합니다. 실제로 프로그램의 첫 번째 줄 앞에 다음 문장을 추가하면 출력 결과는 여전히 정의되지 않습니다. 프로그램 오류는 전역 변수와 같은 이름의 지역 변수가 선언되었다는 의미는 아니지만, 변수 선언문 이전에 변수가 호출되는 한 변수의 값은 정의되지 않아야 하는데, 선언되지 않은 변수의 경우 이번에는 "변수가 정의되지 않았습니다" 오류가 보고되므로 둘 사이의 차이점도 이해해야 하지만 어떤 경우에도 지역 변수와 전역 변수를 호출하지 않는 것이 좋은 코딩 방법입니다. 같은 이름!
마지막 상황을 살펴보면 다음 프로그램에 주의하세요.
1 var strGloblVar = "나는 전역 변수입니다.";
2 function father(){
3 strFatherGloblVar = "에 선언됨 parent function 전역 변수";
4 var strFatherVar = "나는 부모 함수의 지역 변수이고 자식 함수의 전역 변수이기도 합니다.";
5 function child(){
6 strChildGloblVar = " ";
7에 선언된 하위 함수 전역 변수에서                                                                                         >                                      나는 하위 함수의 지역 변수입니다.";8       Alert(strFatherVar);  //출력: "나는 상위 함수의 지역 변수이자 하위 함수의 전역 변수입니다."
9        Alert(strChildVar);  //출력: " "나는 지역 변수입니다. 하위 함수에서" 변수 "
10 Alert("하위 함수에서: "+strGloblVar); //출력: "나는 전역 변수입니다."
11 Alert(strFatherGloblVar);
12 }
13 Alert("Father 함수에서: "+strGloblVar); //출력: "나는 전역 변수입니다."
14                //alert(strChildVar);                        > 출력: "모든 함수의 외부: 상위 함수에 선언된 전역 변수"
21 Alert("모든 함수의 외부: "+strChildGloblVar) //output: "모든 함수의 외부: 하위 함수에 선언된 전역 변수 " JavaScript 클로저를 사용해 본 사람이라면 위 프로그램을 쉽게 이해할 수 있을 것입니다. 클로저는 이 글의 초점이 아니지만 이 작은 예는 클로저의 경우 사용으로 인해 변수의 수명 주기가 변하지 않는다는 것을 증명하는 데 도움이 될 수 있습니다. 클로저의 개념을 버리고 father() 함수 내부를 독립적인 실행 환경으로 간주하면 됩니다. 14행에 보고된 오류는 strChildVar가 child() 함수에 정의된 지역 변수이기 때문입니다. 15행에 보고된 오류는 strChildGloblVar가 호출되기 전에 child() 함수가 실행되지 않았기 때문입니다. 전에도 말했다. 하지만 father() 함수 외부에서 strFatherVar를 인쇄하면 오류가 발생합니다. 이 오류가 발생하는 이유는 간단합니다. strFatherVar는 child()의 전역 변수이지만 father()의 지역 변수입니다.

위는 JavaScript 학습노트 내용입니다. (1) 변수의 생명주기 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.