자 바스 크 립 트 전역 변수 와 국부 변수의 문제 에 대한 영향 을 깊이 이해 하 다

9175 단어 자바 script
자 바스 크 립 트 전역 변수 와 국부 변수의 문제 에 대한 영향 을 깊이 이해 하 다
JavaScript         。                  ,       。    ,                            。  JavaScript     ,                   。  ,                 ;  ,JavaScript        ,                        。


**    **

  JavaScript         ,            this        。                        。     ,    ,             window, window(  )         。                              :
myglobal = "hello"; //      
console.log(myglobal); // "hello"
console.log(window.myglobal); // "hello"
console.log(window["myglobal"]); // "hello"
console.log(this.myglobal); // "hello"
                             

**       **

         ,  JavaScript     web                  ,             ,                             ,        。       
 1.     JavaScript 
 2.         
 3.               
 4.         ,     
   ,               ,  result;  ,             result     。               ,            !                              :
function sum(x, y) {                                
   //      :        
   result = x + y;
   return result;
}
//    
function sum(x, y) {
   var result = x + y;
   return result;
}
      result      。        ,                  .            。         。
                         var  。      ,a       b      ,           :    :
//   ,    
function foo() {
   var a = b = 0;
   // ...
}
//  
function foo() {
   var a, b;
   // ... a = b = 0; //        
}
                   ,  ,      b = 0,    b     。          00       var         a。    ,       :var a=(b=0).              ,            ,               

    **  var    **

                           ,    delete1.   var       (            )       。
 2.  var         (          )      。
    ,    ,                ,           。       delete      ,       :


//         
var global_var = 1;
global_novar = 2; //     
(function () {
   global_fromfunc = 3; //     
}());

//     
delete global_var; // false
delete global_novar; // true
delete global_fromfunc; // true

//      
typeof global_var; // "number"
typeof global_novar; // "undefined"
typeof global_fromfunc; // "undefined"
 ES5     ,      (                 )          。
**      **
     ,        window            (             ,         window     )。        ,                  (         )。            window          ,                    :

var global = (function () {
   return this;
}());

              ,               (    new  ),this         。          ECMAScript 5    ,  ,       ,          。  ,       JavaScript ,                  ,          ,        this          。

** var  **

        var            ,     :
 1.                          .
 2.                 
 3.4.    (          )
  varfunction func() {
   var a = 1,
       b = 2,
       sum = a + b,
       myobject = {},
       i,
       j;
   // function body...
}

var 문 구 를 사용 하여 여러 변 수 를 설명 하고 쉼표 로 구분 할 수 있 습 니 다.이와 같이 변 수 를 초기 화하 고 값 을 초기 화 하 는 것 이 좋 습 니 다.이렇게 하면 논리 적 오 류 를 방지 할 수 있 습 니 다.코드 를 본 후에 초기 화 된 값 에 따라 이러한 변수의 대체적인 용 도 를 알 수 있 습 니 다. 예 를 들 어 대상 으로 할 까요, 정수 로 할 까요?
당신 도 성명 할 때 실제 작업 을 할 수 있 습 니 다. 예 를 들 어 앞의 코드 중의 sum = a + b 와 같은 상황 입 니 다. 다른 예 는 DOM (문서 대상 모델) 을 사용 하여 인용 할 때 단일 한 var 를 사용 하여 DOM 인용 을 부분 변수 로 지정 할 수 있 습 니 다. 아래 코드 와 같 습 니 다.
function func() {
   var a = 1,
       b = 2,
       sum = a + b,
       myobject = {},

   // function body..
   }
//    
function updateElement() {
   var el = document.getElementById("result"),
       style = el.style;
   //   el style       ...
}
}

질문
JavaScript 에 서 는 함수 의 모든 위치 에서 여러 개의 var 문 구 를 설명 할 수 있 으 며, 함수 상단 성명 처럼 역할 을 발휘 할 수 있 습 니 다. 이러한 행 위 를 hoisting (서 스 펜 션 / 지붕 해석 / 예비 해석) 이 라 고 합 니 다.변 수 를 사용 하고 얼마 지나 지 않 아 함수 에서 다시 설명 하면 논리 적 오류 가 발생 할 수 있 습 니 다.자바 스 크 립 트 에 대해 서 는 변 수 를 같은 역할 영역 (같은 함수) 에 있 으 면 모두 설명 으로 여 겨 집 니 다. var 성명 전에 사용 하 더 라 도.다음 예 를 보 세 요.전역 변수 function func () {alert (myname); / "undefined" var myname = "local"; alert (myname); / "local"} func (); /정규 my name = "global"; /global variable function func () {var my name; / 는 - > var my name = undefined; alert (my name); / "undefined" my name = "local"; alert (my name); / / "local"} func ();
이 예 에서 첫 번 째 alert 가 'global', 두 번 째 팝 업 'loacl' 이 라 고 생각 할 수도 있 습 니 다.이러한 기 대 는 이해 할 수 있 습 니 다. 첫 번 째 alert 때 my name 이 설명 되 지 않 았 기 때 문 입 니 다. 이때 함 수 는 자 연 스 럽 게 전체 변수 my name 을 볼 것 입 니 다. 그러나 사실은 이렇게 작 동 하지 않 습 니 다.첫 번 째 alert 에서 'undefined' 가 나타 나 는 것 은 my name 이 함수 의 부분 변수 로 여 겨 졌 기 때 문 입 니 다. (나중에 설명 되 었 음 에 도 불구 하고) 모든 변 수 는 함수 의 맨 위 에 걸 려 있 습 니 다.따라서 이러한 혼란 을 피하 기 위해 서 는 사용 하고 싶 은 모든 변 수 를 미리 밝 히 는 것 이 좋다.
총결산
코드 처 리 는 두 단계 로 나 뉘 는데 첫 번 째 단 계 는 변수, 함수 성명, 그리고 정상 적 인 형식의 매개 변수 생 성 입 니 다. 이것 은 상하 문 을 해석 하고 들 어 가 는 단계 입 니 다.두 번 째 단 계 는 코드 실행 입 니 다. 함수 표현 식 과 불합격 식별 자 (성명 을 위 한 변수) 가 생 성 되 었 습 니 다.
  • 변 수 를 정의 할 때.단일 var 형식 을 사용 하 는 것 을 추천 합 니 다. 흩 어 진 var 를 사용 하면 변수 성명 이 앞 당 겨 질 수 있 습 니 다.
  • var 의 성명 을 쓰 지 않 아 도 delete 를 통 해 변 수 를 삭제 할 수 있 습 니 다.
  • 코드 가 위 에서 아래로 실 행 됩 니 다.할당 은 왼쪽 에서 오른쪽으로 실 행 됩 니 다.
  • 좋은 웹페이지 즐겨찾기