JavaScript 의 역할 영역 과 역할 영역 체인 을 간략하게 분석 합 니 다.
var a = 1; //
function f1() {
alert(a); //alerts '1'
function inner() {
alert(a); //alerts '1'
}
}
f1(); // 1 1;
inner(); //
(2) JS 의 어느 위치 에서 도 var 키워드 성명 을 사용 하지 않 는 변수 도 전역 역할 영역 을 가지 고 있 습 니 다.
function f1() {
var firstName = "James";
lastName = "Camelo";
alert(firstName); //alerts 'James'
alert(secondName); //alerts 'Camelo'
}
f1(); // 'James' 'Camelo'
alert(firstName); //
alert(secondName); // 'Camelo'
변수 secondName 은 전역 역할 영역 을 가지 고 있 으 며, firstName 은 함수 외부 에 접근 할 수 없습니다.
(3) 모든 window 대상 의 속성 은 전역 역할 영역 을 가지 고 있 습 니 다.
요약: 전역 변 수 는 전체 함수 의 생명주기 에 존재 하지만 전역 범위 내 에서 변경 되 기 쉽다.성명 변수 가 var 를 가지 고 있 지 않 으 면 혼란 을 초래 하기 쉽다.전역 변 수 를 적 게 사용 하고 var 를 가 져 옵 니 다.전역 변 수 는 프로그램의 전체 수명 주기 에 존재 하지만 이 를 통 해 전역 변 수 를 방문 할 수 있 는 것 은 아 닙 니 다.
2. 국부 작용 역 / 함수 작용 역 은 전역 작용 역 과 반대로 함수 작용 역 은 일반적으로 함수 의 코드 부분 에서 만 접근 할 수 있 고 외부 에 서 는 변수 접근 을 할 수 없습니다.함수 내부 에서 정 의 된 변 수 는 함수 역할 영역 에 존재 하 며, 그 생명 주 기 는 함수 의 실행 이 끝나 면서 끝 납 니 다.예 를 들 면:
var name = 'James';
function getName(){
var name = 'Camelo';
alert(name); //alerts 'Camelo'
}
alert(name); //alerts ‘James'
3. 품사 역할 영역 / 정적 역할 영역 품사 역할 영역: 함 수 는 역할 영역 에서 실행 되 는 것 이지 역할 영역 에서 실행 되 는 것 이 아 닙 니 다.다시 말 하면 어법 작용 역 은 코드 를 쓸 때 함수 성명 의 위치 에 의 해 결정 된다 (eval () 와 with 는 어법 작용 역 을 속 일 수 있다).아니면 하나의 예 를 통 해 어법 작용 역 을 이해 합 니까?
var name = "James";
function f1(){
alert(name); //alerts 'undefined'
var name = 'Camelo';
alert(name); //alerts 'Camelo'
}
f1(); // 'undefined' 'Camelo'
js 해석 기 는 모든 코드 를 실행 하기 전에 전역 대상 을 만 듭 니 다. 전역 변 수 는 이 전역 대상 의 속성 에 해당 합 니 다.f1 이라는 함수 에 대해 호출 대상 이라는 것 이 생 성 됩 니 다. 국부 변수 함수 파라미터 와 Arguments 는 모두 이 대상 의 일부분 입 니 다.더 치 명 적 인 것 은 호출 대상 이 역할 도 메 인 체인 의 전단 에 있 습 니 다. 이 는 전체 대상 의 속성 에서 호출 대상 과 같은 이름 의 속성 이 숨겨 진 다 는 것 을 의미 합 니 다 (변수의 조 회 는 가장 가 까 운 바 인 딩 컨 텍스트 부터 외부 로 점점 확장 되 고 첫 번 째 바 인 딩 이 완 료 될 때 까지 검색 을 끝 냅 니 다).그래서 코드 세 션 의 f1 함수 내부 'var name =' Camelo ',' var name = 'James',' 숨겨 지고 첫 번 째 alert (name) 는 'var name =' Camelo ',' 이전에 'undefined' 를 출력 했 습 니 다. 함수 정의 가 끝나 면 name 이 역할 영역 에 추가 되 었 기 때문에 alert ()name 이라는 속성 을 찾 을 수 있 지만 징 그 러 운 일 name 은 할당 되 지 않 았 습 니 다. 코뿔소 책 에는 자바 script 함수 가 "그들의 역할 영역 에서 실행 되 는 것 이 아니 라 그들의 역할 영역 에서 실행 되 는 것" 이 라 고 쓰 여 있 습 니 다. 얼마나 추상 적 이 고 정수 적 인 지 를 설명 한 후에 상기 코드 는 다음 코드 와 같 습 니 다.
var name = "James";
function f1(){
var name;
alert(name); //alerts 'undefined'
name = 'Camelo';
alert(name); //alerts 'Camelo'
}
f1(); // 'undefined' 'Camelo'
javascript 의 함 수 는 호출 을 먼저 쓰 고 정 의 를 쓸 수 있 지만, 이렇게 하 는 것 은 매우 좋 지 않 으 며, 좋 지 않 은 습관 을 기 르 고 유지 하기 어 려 울 것 입 니 다.
var name = "James";
f1(); // 'undefined' 'Camelo'
function f1(){
var name;
alert(name); //alerts 'undefined'
name = 'Camelo';
alert(name); //alerts 'Camelo'
}
4. 동적 역할 영역 과 품사 역할 영역 은 정의 할 때 확인 하 는 것 과 다 릅 니 다. 동적 역할 영역 은 실행 할 때 확인 되 며, 생존 주 기 는 코드 세 션 이 실 행 될 때 까지 입 니 다. 동적 변 수 는 동적 역할 영역 에 존재 하 며, 주어진 바 인 딩 값 은 함수 호출 을 확정 하기 전에는 알 수 없습니다.
코드 가 실 행 될 때 대응 하 는 역할 영역 은 정적 이지 만 우 리 는 일부 방법 이나 문 구 를 통 해 역할 영역 체인 을 바 꿀 수 있 습 니 다. 예 를 들 어 with 문 구 를 실행 한 후에 역할 영역 체인 을 원래 상태 로 회복 하지만 일반적으로 with 문 구 를 사용 하지 않 습 니 다. 성능 이 너무 지연 되 기 때 문 입 니 다):
var name = 'James'
alert(name); //alerts 'James'
with({name; 'Camelo'}){
alert(name); //alerts'Camelo'
}
alert(name); //alerts'James'
물론 콜 방법, apply 방법 과 try - catch 의 catch 도 역할 도 메 인 체인 을 수정 할 수 있 습 니 다. 그러나 중요 한 것 은 역할 도 메 인 체인 에 동적 역할 도 메 인 이 존재 할 때 this 인용 은 더욱 복잡 해 지고 처음 만 든 문맥 을 가리 키 지 않 고 호출 자 에 의 해 결정 된다 는 것 입 니 다.
5. 블록 급 역할 영역 (ES6 에 추 가 된 let 는 블록 급 역할 영역 을 만 들 수 있 습 니 다) 이 C 의 프로 그래 밍 언어 와 다 르 고 JavaScript 에 블록 급 역할 영역 이 없습니다. 다시 말 하면 블록 급 구문 내부 에서 설명 하 는 변 수 는 외부 에서 설명 하 는 변수 와 같 으 며 이 블록 급 구문 외부 에서 도 이러한 변수의 값 을 방문 하고 수정 할 수 있 습 니 다. 예 를 들 어:
function f1(){
if( 1 < 3 ){
var name = 'James';
}
alert(name); //alerts'James'
name = 'Camelo';
alert(name); //alerts'Camelo'
}
f1(); // 'James' 'Camelo'
B. 역할 도 메 인 체인 * 8195: 두 가지 모델: * 8195: 품사 역할 도 메 인 은 함수 와 역할 도 메 인 이 어디서 정의 되 는 지 에 만 관심 을 가지 고 어디서 실행 되 는 지 에 관심 을 두 지 않 습 니 다. 역할 도 메 인 체인 은 보통 포 함 된 역할 도 메 인 체인 입 니 다. 역할 도 메 인 을 하나의 끈 으로 생각 할 수 있 습 니 다. 현재 역할 도 메 인 은 끈 끝 에 있 고 전체적인 역할 도 메 인 은 끈 끝 에 있 습 니 다. RHS 와 LHS 인용 은 끈 끝 에서 부터 찾 아 끈 끝 에 있 을 때 까지 찾 습 니 다.도착 하지 않 으 면 이상 (엄격 한 모드 에서) 으로 돌아 갑 니 다.
function foo() {
alert(a); // 3
}
function bar() {
var a = 3;
foo();
}
var a = 2;
bar();
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.