javascript 실행 컨 텍스트,변수 대상 인 스 턴 스 분석

본 고의 실례 는 자 바스 크 립 트 가 상하 문,변수 대상 을 집행 하 는 것 을 설명 한다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
갑자기 2010 년 에 멀리 있 는 오래된 글 을 보 았 다.작 가 는 장절 의 형식 으로 우리 에 게ECMA-262-3의 일부 내용 을 소개 했다.주로 상하 문,변수 대상,역할 역,this 등 언어 세부 사항 과 관련된다.내용 이 짧 고 간결 하 며 문장의 풍격 이 직 설 적 이 고 엄밀 하 며 읽 고 나 면 통쾌 하고 제호 가 머리 에 들 어 오 는 느낌 이 들 어 강력 추천 합 니 다!!
링크:여기,이곳
문장 으로 번역 하려 고 했 는데 이미 누군가가 했 구나.여기,이곳정말 때 를 만 나 지 못 했 는데,얼마나 유 감 스 러 운 가!
필 기 를 해서 내 마음 을 달 래 라.
상하 문 실행 Context 실행
컨트롤 러(control)가 실행 가능 한 코드 로 바 뀔 때마다 실행 가능 한 컨 텍스트 를 만 들 고 들 어 갑 니 다.
짧 은 문장 에 풍부 한 내용 이 담 겨 있다.
  • 컨트롤 러:즉ECMAScript엔진
  • 변환:실행 가능 한 코드 에서 다른 실행 가능 한 코드 로 전환
  • 실행 가능 코드:전역 코드,함수 코드,js코드(각각 세 가지 역할 영역 에 대응)
  • 실행 문맥:추상 적 인 개념 으로 ECMA-262 기준 은 이 개념 으로 실행 가능 코드(executable code)개념 과 구분
  • 실행 컨 텍스트 는 논리 적 으로 스 택 을 구성 합 니 다.스 택 아래쪽 은 항상 전역 컨 텍스트(global context)이 고 스 택 상단 은 현재/활동 의 실행 컨 텍스트(activeExecution Context)입 니 다.스 택 은 EC 형식의 변수(various kingds of EC)가 밀어 내 거나 팝 업 되 는 동시에 수 정 됩 니 다.
    예 를 들 어,우 리 는 상하 문 창 고 를 모 의 실행 할 수 있 는 그룹 을 정의 할 수 있다.
    
    ECStack = [
     globalContext,
     <foo> functionContext
    ]
    
    변수 개체 VariableObject
    변수 대상(VO)은 실행 컨 텍스트 의 속성 으로 존재 합 니 다.다음 내용 을 저장 합 니 다.
  • 모든 변수 성명(var,VariableDeclaration)
  • VO 의 속성 입 니 다.이 속성 은 변수 이름과 undefined 값 으로 구성 되 어 있 습 니 다.만약 변수 이름 이 이미 설 명 된 형식 매개 변수 나 함수 와 같다 면 변 수 는 이미 존재 하 는 이러한 속성 을 방해 하지 않 을 것 입 니 다.
  • 함수 선언(Function Declaration,FD 로 약칭)
  • VO 의 속성 입 니 다.이 속성 은 함수 대상(function-object)의 이름과 값 으로 구성 되 어 있 습 니 다.변수 대상 에 같은 이름 의 속성 이 존재 한다 면 이 속성 을 완전히 바 꿉 니 다.
  • 및 함수 의 형 삼
  • VO 의 속성 은 하나의 형식 매개 변수의 이름과 값 으로 구성 된다.실제 매개 변 수 를 전달 하지 않 으 면 이 속성 은 형식 매개 변수의 이름과 undefined 값 으로 구 성 됩 니 다.
  • 
    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상기 코드 실행 효 과 를 테스트 할 수 있 습 니 다.
    더 많은 자 바스 크 립 트 관련 내용 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
    본 고 에서 말 한 것 이 여러분 의 자 바스 크 립 트 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기