javascript 실행 컨 텍스트,변수 대상 인 스 턴 스 분석
갑자기 2010 년 에 멀리 있 는 오래된 글 을 보 았 다.작 가 는 장절 의 형식 으로 우리 에 게
ECMA-262-3
의 일부 내용 을 소개 했다.주로 상하 문,변수 대상,역할 역,this 등 언어 세부 사항 과 관련된다.내용 이 짧 고 간결 하 며 문장의 풍격 이 직 설 적 이 고 엄밀 하 며 읽 고 나 면 통쾌 하고 제호 가 머리 에 들 어 오 는 느낌 이 들 어 강력 추천 합 니 다!!링크:여기,이곳
문장 으로 번역 하려 고 했 는데 이미 누군가가 했 구나.여기,이곳정말 때 를 만 나 지 못 했 는데,얼마나 유 감 스 러 운 가!
필 기 를 해서 내 마음 을 달 래 라.
상하 문 실행 Context 실행
컨트롤 러(control)가 실행 가능 한 코드 로 바 뀔 때마다 실행 가능 한 컨 텍스트 를 만 들 고 들 어 갑 니 다.
짧 은 문장 에 풍부 한 내용 이 담 겨 있다.
ECMAScript
엔진js
코드(각각 세 가지 역할 영역 에 대응)예 를 들 어,우 리 는 상하 문 창 고 를 모 의 실행 할 수 있 는 그룹 을 정의 할 수 있다.
ECStack = [
globalContext,
<foo> functionContext
]
변수 개체 VariableObject변수 대상(VO)은 실행 컨 텍스트 의 속성 으로 존재 합 니 다.다음 내용 을 저장 합 니 다.
VO = {
// context data (var, FD, function arguments)
}
변수 나 함 수 를 설명 할 때 변수의 이름과 값 으로 VO 에 새로운 속성 을 만 듭 니 다.예 를 들 면:
var m = 30;
function test(a,b) {
var c = 20
function d() {}
var e = function _e() {};
}
test(10)
"test"함수 의 컨 텍스트 에 들 어 갈 때(전달 매개 변수 10)AO 는 다음 과 같 습 니 다.
AO(test) = {
a: 10,
b: undefined,
c: undefined,
d: <reference to FunctionDeclaration "d">
e: undefined
};
test 가 마지막 까지 실 행 될 때 현재 컨 텍스트 스 택 에 대응 합 니 다:
ECStack = [
globalContext: {
VO: {
m: 30,
test:
}
},
test functionContext: {
VO: {
a: 10,
b: undefined,
c: 20,
d: <reference to FunctionDeclaration "d">,
e: <reference to FunctionDeclaration "_e">
}
}
]
변수일반적으로 각종 글 과 자 바스 크 립 트 관련 서적 은"var 키 워드 를 사용 하 든(전역 상하 문 에서)var 키 워드 를 사용 하지 않 든(어느 곳 에서 든)변 수 를 설명 할 수 있다"고 주장 한다.이것 은 절대로 헛소문 이라는 것 을 기억 하 십시오.변 수 는 var 키 워드 를 사용 해야만 설명 할 수 있 습 니 다.
아래 의 실례 를 통 해 구체 적 인 차 이 를 봅 시다.
alert(a); // undefined
alert(b); // "b" is not defined
b = 10;
var a = 20;
모든 근원 은 VO 와 그 수정 단계 입 니 다(상하 문 단계 와 실행 코드 단계 에 들 어 갑 니 다).
VO = {
a: undefined
};
우 리 는'b'가 하나의 변수 가 아니 기 때문에 이 단계 에'b'가 전혀 없다 는 것 을 알 수 있다.'b'는 실행 코드 단계 에서 만 나타 날 것 이다.예 코드 를 바 꿉 시다.
alert(a); // undefined, we know why
b = 10;
alert(b); // 10, created at code execution
var a = 20;
alert(a); // 20, modified at code execution
변수 에 대한 중요 한 지식 이 하나 더 있 습 니 다.변 수 는 단순 속성 에 비해 하나의 특성(attribute)이 있 습 니 다.{DontDelete}이 특성의 의 미 는 delete 연산 자 를 통 해 변수 속성 을 직접 삭제 하 는 것 과 다 릅 니 다.
a = 10;
alert(window.a); // 10
alert(delete a); // true
alert(window.a); // undefined
var b = 20;
alert(window.b); // 20
alert(delete b); // false
alert(window.b); // still 20
2018-8-2-실행 상하 문,변수 대상 다시 보기관심 있 는 친 구 는 온라인 HTML/CSS/JavaScript 코드 실행 도 구 를 사용 할 수 있 습 니 다.http://tools.jb51.net/code/HtmlJsRun상기 코드 실행 효 과 를 테스트 할 수 있 습 니 다.
더 많은 자 바스 크 립 트 관련 내용 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자 바스 크 립 트 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thymeleaf 의 일반 양식 제출 과 AJAX 제출텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.