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
})();
개인 이해: '어법 분석' 의 역할 은 함수 의 상급 역할 도 메 인 체인 을 확정 하 는 것 이 므 로 이 점 은 증 거 를 구 해 야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.