javascript acivation object 와 variable object 및 사전 컴 파일
3857 단어 JavaScriptobject어떻게문맥
코드 는 다음 과 같 습 니 다:
/* remember that `this` refers to global object when in global scope */
var GLOBAL_OBJECT = this;
var foo = 1;
GLOBAL_OBJECT.foo; // 1
foo === GLOBAL_OBJECT.foo; // true
function bar(){}
typeof GLOBAL_OBJECT.bar; // "function"
GLOBAL_OBJECT.bar === bar; // true
전역 변 수 는 전역 대상 의 속성 이 되 었 습 니 다. 그러나 함수 코드 (Function code) 에서 정의 하 는 부분 변 수 는 어떻게 될까요?행동 은 사실 매우 비슷 하 다. 그것 은 변수 대상 의 속성 이 되 었 다.유일한 차 이 는 함수 코드 (Function code) 에서 변수 대상 이 전역 대상 이 아니 라 이른바 활성화 대상 (Activation object) 이라는 점 이다.함수 코드 (Function code) 가 실행 역할 영역 에 들 어 갈 때마다 활성화 대상 (Activation object) 을 만 듭 니 다. 함수 코드 (Function code) 의 변수 와 함수 가 활성화 대상 의 속성 이 될 뿐만 아니 라 함수 의 매개 변수 (형 삼 과 대응 하 는 이름) 와 특정한 Arguments 대상 도 마찬가지 입 니 다.활성화 대상 은 내부 메커니즘 으로 프로그램 코드 에 진정 으로 접근 하지 않 습 니 다.
코드 는 다음 과 같 습 니 다:
(function(foo){
var bar = 2;
function baz(){}
/*
In abstract terms,
Special `arguments` object becomes a property of containing function's Activation object:
ACTIVATION_OBJECT.arguments; // Arguments object
...as well as argument `foo`:
ACTIVATION_OBJECT.foo; // 1
...as well as variable `bar`:
ACTIVATION_OBJECT.bar; // 2
...as well as function declared locally:
typeof ACTIVATION_OBJECT.baz; // "function"
*/
})(1);
마지막 으로 Eval 코드 (Eval code) 에서 설명 하 는 변 수 는 호출 중인 컨 텍스트 의 변수 대상 의 속성 으로 만 들 어 졌 습 니 다.Eval 코드 (Eval code) 는 컨 텍스트 를 실행 하고 있 는 변수 대상 만 사용 합 니 다.
코드 는 다음 과 같 습 니 다:
var GLOBAL_OBJECT = this;
/* `foo` is created as a property of calling context Variable object,
which in this case is a Global object */
eval('var foo = 1;');
GLOBAL_OBJECT.foo; // 1
(function(){
/* `bar` is created as a property of calling context Variable object,
which in this case is an Activation object of containing function */
eval('var bar = 1;');
/*
In abstract terms,
ACTIVATION_OBJECT.bar; // 1
*/
})();
2. "사전 컴 파일"
Javascript 은 < script > 세그먼트 의 방식 에 따라 관련 코드 세그먼트 를 사전 컴 파일 처리 하고 변 수 를 미리 정의 한 다음 에 함 수 를 미리 정의 하 는 방식 으로 사전 컴 파일 합 니 다!또한 변수 / 함수 가 세그먼트 의 모든 장소 에서 명시 적 성명 (변수 전에 var 추가) 을 하 더 라 도 모든 코드 가 실행 되 기 전에 사전 컴 파일 을 합 니 다. 또한 변수의 값 은 초기 undefined 이 고 함수 변수의 초기 값 은 함수 체 입 니 다. 다음은 예제 코드 를 사용 하여 전체적인 사전 컴 파일 상황 을 설명 합 니 다.
alert(f);//function f(){ return1;}
alert(b);//undefined
alert(a);//undefined
var a = function (){
return 2;
}
function f (){ /
return 1;
};
var b = 10;
덮어 쓰기: 다음 순서에 따라 var a 는 undefined 로 사전 컴 파일 되 었 고 a 는 "functiona () {return 1;}" 로 사전 컴 파일 되 었 으 며 a 는 "functiona () {return 10;}" 로 사전 컴 파일 되 었 기 때문에 마지막 a 는 "functiona () {return 10;}" 입 니 다.
alert(a);//function a (){return 10;};
function a (){
return 1;
};
function a (){
return 10;
};
var a = 123;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.