기본 JavaScript 지식 요약 (9) 범위 및 범위 체인에 대한 자세한 설명

php中世界最好的语言
풀어 주다: 2018-03-10 13:36:32
원래의
1389명이 탐색했습니다.

이번에는 기본 JavaScript 지식 요약을 가져왔습니다. 총 11개의 지식 포인트가 있습니다. 기본 JavaScript 지식 요약 (9) 다음은 실제 사례를 살펴보겠습니다.

범위 정교화

[[범위]]: 모든 JavaScript 함수는 객체입니다. 객체에는 우리가 액세스할 수 있는 속성이 있지만 일부는 액세스할 수 없습니다. 이러한 속성은 JavaScript 엔진에서만 액세스할 수 있으며 [[scope]]는 그 중 하나입니다.

[[scope]]는 런타임 컨텍스트 모음을 저장하는 범위(scope)를 나타냅니다.

범위 체인: [[scope]]에 저장된 실행 컨텍스트 개체 모음, 이 모음을 체인이라고 합니다. 범위 체인 링크

런타임 컨텍스트: 함수가 실행되면 실행 컨텍스트라는 내부 개체가 생성됩니다. 실행 컨텍스트는 함수가 실행될 때의 환경을 정의합니다. 따라서 함수가 실행될 때마다 고유하므로 함수를 여러 번 호출하면 함수 실행이 완료되면 여러 실행 컨텍스트가 생성됩니다. 실행 컨텍스트가 파괴되었습니다

변수 찾기: 스코프 체인의 위에서 아래로 검색하세요

function a() {    function b(){        var b = 234;
    }    
    var a = 123;
    b();
}var glob = 100;
a();
로그인 후 복사

먼저 위의 함수를 살펴보겠습니다. 이것은 전체 함수이고 a는 전역 범위에 있고 그 아래에 glob이 있습니다.

1단계: 우선 시스템이 보는 것은 a의 정의여야 합니다. a가 정의되면 [[범위]]가 됩니다. 이 Position 0은 GO를 가리킨다


Activation Object

0은 이 테이블을 가리킨다

a
/
[[scope]]    
scope指向scope chain
scope chain
scope指向这里
로그인 후 복사

1은 이 테이블을 가리킨다

this    window    
window    (object)    
document    (object)    
a    (function)    
glob    100    
[[scope]]里面有这个全局的执行期上下文,然后a被执行了,a被执行,a产生的这个AO,把自己的AO存到作用域链的最顶端,形成一个新的作用域链,现在的a的[[scope]]和刚才的那个[[scope]]不一样了
a
/
[[scope]]
scope指向scope chain
scope chain
scope指向这里
로그인 후 복사

그 안에 저장된 값이 다를 뿐이다[[scope]]. 그 [[scope] ], 지금은 다음을 보지 않습니다. 이때 변수에 액세스하면 a의 [[scope]]에 액세스하고 a의 [[scope]]에서 항목을 가져옵니다. A의 스코프는 창고입니다. 이 라이브러리에는 스코프 체인이 저장되어 있으며, 거기에 다양한 변수가 걸려 있습니다. 뭔가를 얻으러 갈 때 위쪽과 아래쪽을 살펴봅니다.

그러면 b의 정의에서 a의 실행은 b를 실행한 후에만 정의될 수 있습니다. b가 정의되면 자연스러운 [[범위]]가 있고 [[범위]]에는 있어야 하는 것이 저장됩니다. 스코프 체인이지만 해당 스코프 체인은 a의 스코프 체인과 다릅니다. a가 정의되면 전역에 있고 액세스할 수 있는 유일한 속성은 자신의 AO 및 전역 GO이지만 b는 a에 정의되어 있습니다. 함수이므로 b의 [[scope]]는 자체 AO뿐만 아니라 a의 AO에도 액세스할 수 있으며 전역 GO

this    window    
arguents    []    
a    123    
b    (function)    
Global Object
로그인 후 복사
로그인 후 복사

scope는 스코프 체인

scope chain


을 가리킵니다. 스코프는 여기를 가리킵니다

0 이 위치의 0은 자신의 AO를 가리킵니다.

1 이 위치의 1은

2의 AO를 가리킵니다. 이 위치의 0은 GO

Activation Object

0점을 가리킵니다. to 이 테이블이다

this    window    
window    (object)    
document    (object)    
a    (function)    
glob    100
로그인 후 복사

1 이 테이블을 가리킨다

b
/
[[scope]]
로그인 후 복사

1 이 테이블을 가리킨다

this    window    
arguents    []    
b    234;    
Activation  Object
로그인 후 복사

Scope destroy

b가 실행되면 자신의 ao를 파괴하고 정의 상태로 돌아가서 다음 실행을 기다린다.

b는 함수 a의 마지막 문장이므로 b가 실행된 후 a도 소멸되고 b의 [[scope]]도 소멸되어 정의 상태로 돌아가 다음 실행을 기다리게 됩니다

this    window    
arguents    []    
a    123    
b    (function)    
Global Object
로그인 후 복사
로그인 후 복사

그래서 외부 함수는

내부 함수


의 속성과 값에 액세스할 수 없습니다. 이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

관련 읽기:

기본 JavaScript 지식 요약(6) 함수, 초기 범위(2부)

기본 JavaScript 지식 요약(7) 재귀

기본 JavaScript 지식 요약(8)사전 컴파일 실행 과정

위 내용은 기본 JavaScript 지식 요약 (9) 범위 및 범위 체인에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿