>  Q&A  >  본문

JavaScript에서 변수의 범위는 무엇입니까?

<p>JavaScript에서 변수의 범위는 무엇입니까? 함수 내부와 외부에서 동일한 범위를 갖나요? 아니면 상관이 있나요? 또한 변수가 전역적으로 정의되면 어디에 저장되나요? </p>
P粉696891871P粉696891871448일 전528

모든 응답(2)나는 대답할 것이다

  • P粉546257913

    P粉5462579132023-08-22 12:41:43

    Javascript는 범위 체인을 사용하여 주어진 함수의 범위를 결정합니다. 일반적으로 전역 범위가 있으며 정의된 각 함수에는 자체 중첩 범위가 있습니다. 다른 함수 내에 정의된 모든 함수에는 외부 함수에 연결된 로컬 범위가 있습니다. 이는 항상 범위가 정의된 소스 코드의 위치입니다.

    범위 체인의 요소는 기본적으로 상위 범위에 대한 포인터가 있는 맵입니다.

    변수를 구문 분석할 때 JavaScript는 가장 안쪽 범위에서 시작하여 바깥쪽으로 검색합니다.

    회신하다
    0
  • P粉165522886

    P粉1655228862023-08-22 10:58:25

    TLDR

    JavaScript에는 어휘적(정적이라고도 함) 범위와 클로저가 있습니다. 즉, 소스 코드를 보고 식별자의 범위를 결정할 수 있습니다.

    네 가지 범위는 다음과 같습니다.

    1. 글로벌 - 모든 콘텐츠에 표시
    2. 함수 - 함수 내부(및 해당 하위 함수 및 블록 내부)에 표시됩니다.
    3. 블록 - 블록 내부(및 해당 하위 블록 내부)에 표시됩니다.
    4. 모듈 - 모듈 내부에 표시

    전역 및 모듈 범위의 특별한 경우를 제외하고 변수는 var(函数作用域)、let(块作用域)和const(블록 범위)를 사용하여 선언됩니다. 엄격 모드에서는 대부분의 다른 형태의 식별자 선언에 블록 범위가 있습니다.

    개요

    범위는 식별자가 유효한 코드 베이스의 영역입니다.

    어휘적 환경은 식별자 이름과 그에 연결된 값 간의 매핑입니다.

    범위는 어휘 환경의 연결된 중첩으로 형성되며, 각 중첩 수준은 상위 실행 컨텍스트의 어휘 환경에 해당합니다.

    이러한 연결된 어휘 환경은 범위 "체인"을 형성합니다. 식별자 확인은 이 체인을 따라 일치하는 식별자를 검색하는 프로세스입니다.

    식별자 확인은 외부로만 수행됩니다. 이런 방식으로 외부 어휘 환경은 내부 어휘 환경을 "볼" 수 없습니다.

    JavaScript 식별자의 범위 를 결정할 때 세 가지 관련 요소가 있습니다.

    1. 식별자를 선언하는 방법
    2. 식별자의 선언 위치
    3. 엄격 모드 또는 비엄격 모드
    4. 여부

    식별자를 선언하는 몇 가지 방법:

    1. varletconst
    2. 함수 매개변수
    3. 캐치 블록 매개변수
    4. 함수 선언
    5. 이름이 지정된 함수 표현식
    6. 전역 객체에 암시적으로 정의된 속성(예: 비엄격 모드에서는 생략 var)
    7. import성명
    8. eval

    일부 식별자의 선언 위치:

    1. 글로벌 컨텍스트
    2. 함수 본체
    3. 일반 블록
    4. 제어 구조의 상단(예: 루프, if, while 등)
    5. 제어 구조
    6. 모듈

    선언 스타일

    var

    식별자 var声明的标识符具有函数作用域,除非它们直接在全局上下文中声明,此时它们将作为全局对象的属性添加,并具有全局作用域。它们在eval는 전역 컨텍스트에서 직접 선언되지 않는 한

    를 사용하여 선언된 함수 범위

    를 가지며, 이 경우 전역 객체의 속성으로 추가되고 전역 범위를 갖습니다.

    기능 사용에는 별도의 규칙이 있습니다.

    letconstlet 및 const 식별자

    는 전역 컨텍스트에서 직접 선언되지 않는 한 🎜를 사용하여 블록 범위 🎜를 갖습니다. 이 경우 전역 범위를 갖습니다. 🎜

    참고: letconstvar都被提升。这意味着它们的逻辑定义位置是其封闭作用域(块或函数)的顶部。但是,使用letconst선언된 변수는 제어 흐름이 소스 코드의 선언 지점을 통과할 때까지 읽거나 할당할 수 없습니다. 이 임시 기간을 임시 데드존이라고 합니다.

    으아악

    회신하다
    0
  • 취소회신하다