JS 독서 노트 (4) 변수 역할 영역
3722 단어 JavaScript책 을 읽다.
설명 되 지 않 은 변수
할당 되 지 않 은 변수
정의 되 지 않 은 변수 = 설명 되 지 않 은 변수
변수 역할 영역의 기본 규칙:
for(var i = 10;i < 10;i++)
{
do something
}
alert(i);// i = 9
javascript 변수 역할 영역 은 실행 할 때 결정 하 는 것 이 아니 라 정의 할 때 결정 하 는 것 입 니 다. 즉, 품사 역할 영역 은 소스 코드 에 달 려 있 고 컴 파일 러 는 정태 적 인 분석 을 통 해 확정 할 수 있 기 때문에 품사 역할 영역 도 정태 적 인 역할 영역 이 라 고 합 니 다.
javascript 은 모든 함수 인 스 턴 스 를 실행 할 때 실행 환경 을 만 듭 니 다. 실행 환경 에는 호출 대상 이 포함 되 어 있 습 니 다. 호출 대상 은 scriptObject 입 니 다. 내부 변수 표, 내장 함수 표, 부모 인용 표 등 문법 분석 구 조 를 저장 하 는 데 사 용 됩 니 다.(내부 변수 표 와 내장 함수 표 등 정 보 는 문법 분석 단계 에서 이미 얻 었 고 문법 트 리 에 저 장 됩 니 다. 함수 인 스 턴 스 가 실 행 될 때 이 정 보 를 문법 트 리 에서 scriptObject 로 복사 합 니 다).
var arg = 1;
function funcTest() {
alert(arg);
var arg = 2;
}
arg = 10;
funcTest();
이 함수 의 출력 은 undefined 이지 10 이 아 닙 니 다. functest 함수 가 실 행 될 때 functest 에 대응 하 는 역할 영역 에 들 어가 서 alert 를 실행 할 때 변수 이름 arg 를 만 났 을 때 현재 역할 영역 에서 찾 습 니 다. arg = 2 는 alert 방법 으로 정의 되 어 있 기 때문에 컴 파일 을 시작 할 때,(품사 분석 은 이미 정 의 된 변수 와 방법 을 얻 었 다. 이것 은 바로 변수 역할 도 메 인 은 정의 할 때 결정 하 는 것 이지 실행 할 때 결정 하 는 것 이 아니다. 즉, 품사 역할 도 메 인 은 소스 코드 에 달 려 있 고 컴 파일 러 는 정태 적 인 분석 을 통 해 확정 할 수 있다) 이 현재 역할 도 메 인 에 변 량 arg 가 존재 하지만 할당 되 지 않 았 기 때문에 arg 의 값 은 undefined 이다.
역할 영역 에 관 한 좋 은 글 입 니 다.
다른 글 에서 역할 영역 에 대한 설명:
JavaScript 의 함 수 는 동적 역할 영역 이 아 닌 정적 역할 영역 을 기반 으로 합 니 다. 이 말 은 JavaScript 의 함 수 는 실 행 된 역할 영역 이 아 닌 정 의 된 역할 영역 에서 실 행 됩 니 다. 정적 작업 영역 에서 변 수 는 항상 최상 위 역할 영역 을 가리 키 고 있 습 니 다. 프로그램 텍스트 (program text) 입 니 다.하나의 속성 을 실행 할 때 호출 되 는 스 택 과 는 무관 합 니 다. 변 수 를 일치 시 키 는 역할 도 메 인 은 프로그램 텍스트 만 분석 하면 되 기 때 문 입 니 다. 이러한 역할 도 메 인 은 정적 역할 도 메 인 (lexical scoping) 이 라 고 합 니 다.
function f1() {
var a = 20;
return function () { alert(a); }
}
var b = f1();
b();
결과: 20
function f1() {
var a = 20;
return f2
}
function f2() {
alert(a);
}
var b = f1();
b();
결과: undefined (사실은 잘못 보 고 했 습 니 다. 정의 되 지 않 은 변 수 를 인 용 했 기 때 문 입 니 다)
프로그램 1 에서 익명 함수 b () 가 설명 되 었 을 때 변수 a 는 역할 영역 에 저장 되 어 있 습 니 다. 따라서 20 을 얻 었 습 니 다. 그러나 프로그램 2 에 서 는 함수 f2 () 에 서 는 변수 a 를 설명 하지 않 아 값 이 없습니다.
그러나 함수 가 정의 되 었 습 니 다. 그 역할 영역 과 역할 영역 체인 을 '기억' 합 니 다. 이것 은 함수 의 모든 변 수 를 의미 하 는 것 이 아 닙 니 다. 반대로 임의로 추가, 수정, 삭제 할 수 있 습 니 다. 함수 에는 최신 변 수 를 저장 합 니 다. 그러나 이 역할 영역 에 언제 포함 되 는 것 이 아니 라 변수 가 정의 되 는 지 알 아야 합 니 다.
정적 역할 영역의 몇 가지 특징
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.