분류 javascript

JavaScript의 전역 변수는 실제로 어떻게 작동합니까?

컨텐츠 정보

  • 조회 202 (작성일 )

본문

몇 가지 흥미로운 현상이 스크립트의 범위, 소위 전역 개체 등의 역할을 합니다.


원본 : https://2ality.com/2019/07/global-scope.html 


Scopes 

변수의 어휘 범위 (짧은 : 범위)는 액세스 할 수 있는 프로그램의 영역입니다.

자바 스크립트의 범위는 정적 (런타임에 변경되지 않음)이며 중첩 될 수 있습니다.


function func() { // (A)
  const foo = 1;
  if (true) { // (B)
    const bar = 2;
  }
}


if 문 (라인 B)에 의해 도입 된 범위는 함수 func() (라인 A)의 범위 내에서 중첩됩니다.

범위 S의 가장 안쪽에 있는 범위를 S의 외부 범위라고 합니다. 이 예에서 func는 if의 외부 범위입니다.


어휘 환경(Lexical environments) 


JavaScript 언어 사양에서 범위는 어휘 환경을 통해 "구현"됩니다. 두 가지 구성 요소로 구성됩니다.


변수 이름을 변수 값에 매핑하는 환경 레코드 (think dictionary). 이것은 JavaScript가 변수를 저장하는 곳입니다.

환경 레코드에 있는 하나의 키 - 값 엔트리를 바인딩이라고 합니다.


외부 환경에 대한 참조 - 현재 환경이 나타내는 범위의 외부 범위를 나타내는 환경입니다.


따라서 중첩 된 범위의 트리는 외부 참조로 연결된 중첩 된 환경의 트리로 표시됩니다.


전역 개체 (The global object) 


전역 객체는 속성이 전역 변수 인 객체입니다. (우리는 그것이 환경 트리에 얼마나 정확하게 들어 맞는지 곧 연구 할 것입니다.) 그것은 여러 다른 이름을 가지고 있습니다 :


모든 곳 (제안 된 기능) : globalThis

전역 개체의 다른 이름은 플랫폼 및 언어 구성에 따라 다릅니다.