JavaScript 어법 작용 영역 분석

2235 단어 JavaScript

var str = "global";   
function scopeTest(){   
    print(str);   
    var str = "local";   
    print(str);   
}   
    
scopeTest();  

위의 예제 에서 정확 한 출력 결과:
undefined
local
분석:
예 는 매우 현혹 적 이어서 좀 더 깊이 말 할 수 있다.'어법 작용 역' 을 언급 하면 반드시 '작용 역 체인' 을 동시에 언급 해 야 이들 의 결합 이 효과적으로 이해 할 수 있 기 때문이다.
이 예 에 대한 나의 설명 은 다음 과 같다.
첫 번 째 줄 의 str (global) 는 정의 할 때 먼저 역할 도 메 인 체인 의 머리 즉 전체 역할 도 메 인 에 저 장 됩 니 다.
scopeTest 를 호출 할 때 js 해석 기 는 호출 대상 (callobject) 을 1 개 만 들 고 scopeTest 에서 var 를 통 해 정 의 된 str 를 하나의 속성 으로 설정 한 다음 에 이 대상 을 역할 도 메 인 체인 의 최 전방 에 추가 합 니 다. 통속 적 인 이 해 는 최 우선 접근 권 을 가 집 니 다.
str 에 접근 할 때 먼저 scopeTest 의 호출 대상 을 조회 합 니 다. str 를 찾 지 못 하면 이 대상 의 이전 역할 영역 만 조회 합 니 다. 이 를 통 해 전체 역할 영역 까지 유추 합 니 다.
이 예 에서 호출 대상 에서 str 를 찾 을 수 있 기 때문에 전체 대상 의 str 는 덮어 씁 니 다. 세 번 째 줄 은 호출 대상 에 str 정의 가 있 지만 값 을 부여 하지 않 았 기 때문에 undefined 입 니 다.네 번 째 줄, 할당;다섯 번 째 줄 은 값 이 있어 서 local 입 니 다.

var str = "global";      
function scopeTest(){      
    print(str);    //global     
}      
       
scopeTest();   

var str = "global";   
function scopeTest(){   
    print(str);    //global  
}   
    
scopeTest(); 

왜 여기 가 글로벌 이 야?scopeTest 호출 대상 에 str 의 정의 가 없 기 때문에 전역 역할 영역 을 조회 해 야 하기 때문에 global 을 얻 을 수 있 습 니 다.
왜 '어법 작용 역' 의 효 과 는 '함수 가 그 역할 역 을 정의 하 는 데 서 실행 되 는 것 이지 그 환경 을 실행 하 는 것 이 아니다' 입 니까?그것 은 함수 가 항상 그것 을 정의 할 때 만 확 정 된 '역할 도 메 인 체인' 의 단계별 방문 변 수 를 따라 외부 실행 환경 과 무관 하기 때 문 입 니 다.

var str = "global";      
function scopeTest(){      
    alert(str);       
}   
(function(){   
   var str="aaa";   
   scopeTest();//global   
})();     

var str = "global";   
function scopeTest(){   
    alert(str);    
}
(function(){
   var str="aaa";
   scopeTest();//global
})();   

개인 이해: '어법 분석' 의 역할 은 함수 의 상급 역할 도 메 인 체인 을 확정 하 는 것 이 므 로 이 점 은 증 거 를 구 해 야 한다.

좋은 웹페이지 즐겨찾기