Javascript는 범위 체인을 사용하여 주어진 함수의 범위를 결정합니다. 일반적으로 전역 범위가 있으며 정의된 각 함수에는 자체 중첩 범위가 있습니다. 다른 함수 내에 정의된 모든 함수에는 외부 함수에 연결된 로컬 범위가 있습니다. 이는 항상 범위가 정의된 소스 코드의 위치입니다.
범위 체인의 요소는 기본적으로 상위 범위에 대한 포인터가 있는 맵입니다.
변수를 구문 분석할 때 JavaScript는 가장 안쪽 범위에서 시작하여 바깥쪽으로 검색합니다.
Javascript는 범위 체인을 사용하여 주어진 함수의 범위를 결정합니다. 일반적으로 전역 범위가 있으며 정의된 각 함수에는 자체 중첩 범위가 있습니다. 다른 함수 내에 정의된 모든 함수에는 외부 함수에 연결된 로컬 범위가 있습니다. 이는 항상 범위가 정의된 소스 코드의 위치입니다.
범위 체인의 요소는 기본적으로 상위 범위에 대한 포인터가 있는 맵입니다.
변수를 구문 분석할 때 JavaScript는 가장 안쪽 범위에서 시작하여 바깥쪽으로 검색합니다.
TLDR
JavaScript에는 어휘적(정적이라고도 함) 범위와 클로저가 있습니다. 즉, 소스 코드를 보고 식별자의 범위를 결정할 수 있습니다.
네 가지 범위는 다음과 같습니다.
전역 및 모듈 범위의 특별한 경우를 제외하고 변수는
var
(函数作用域)、let
(块作用域)和const
(블록 범위)를 사용하여 선언됩니다. 엄격 모드에서는 대부분의 다른 형태의 식별자 선언에 블록 범위가 있습니다.개요
범위는 식별자가 유효한 코드 베이스의 영역입니다.
어휘적 환경은 식별자 이름과 그에 연결된 값 간의 매핑입니다.
범위는 어휘 환경의 연결된 중첩으로 형성되며, 각 중첩 수준은 상위 실행 컨텍스트의 어휘 환경에 해당합니다.
이러한 연결된 어휘 환경은 범위 "체인"을 형성합니다. 식별자 확인은 이 체인을 따라 일치하는 식별자를 검색하는 프로세스입니다.
식별자 확인은 외부로만 수행됩니다. 이런 방식으로 외부 어휘 환경은 내부 어휘 환경을 "볼" 수 없습니다.
JavaScript 식별자의 범위 를 결정할 때 세 가지 관련 요소가 있습니다.
식별자를 선언하는 몇 가지 방법:
var
,let
和const
var
)import
성명eval
일부 식별자의 선언 위치:
선언 스타일
var
식별자
를 사용하여 선언된 함수 범위var
声明的标识符具有函数作用域,除非它们直接在全局上下文中声明,此时它们将作为全局对象的属性添加,并具有全局作用域。它们在eval
는 전역 컨텍스트에서 직접 선언되지 않는 한를 가지며, 이 경우 전역 객체의 속성으로 추가되고 전역 범위를 갖습니다.
기능 사용에는 별도의 규칙이 있습니다.let
和const
let 및 const 식별자참고:
let
,const
和var
都被提升。这意味着它们的逻辑定义位置是其封闭作用域(块或函数)的顶部。但是,使用let
和const
선언된 변수는 제어 흐름이 소스 코드의 선언 지점을 통과할 때까지 읽거나 할당할 수 없습니다. 이 임시 기간을 임시 데드존이라고 합니다.