> 웹 프론트엔드 > JS 튜토리얼 > 이 JavaScript 코드는 왜 '1'을 반환합니까?

이 JavaScript 코드는 왜 '1'을 반환합니까?

Susan Sarandon
풀어 주다: 2024-12-22 08:34:10
원래의
985명이 탐색했습니다.

Why Does This JavaScript Code Return

Javascript 함수 범위 지정 및 호이스팅: 수수께끼 풀기

JavaScript 영역에서 복잡한 코드를 풀려면 함수 범위 지정 및 호이스팅을 이해하는 것이 중요합니다. . "이 코드는 왜 '1'을 반환하는가?"라는 질문을 촉발한 예를 살펴보겠습니다.

var a = 1;

function b() {
    a = 10;
    return;

    function a() {}
}
b();
alert(a);
로그인 후 복사

함수 호이스팅: 비밀 풀기

함수 호이스팅 함수 선언을 해당 범위의 맨 위로 올려놓는 흥미로운 메커니즘입니다. 이 예에서 함수 b는 전역 범위로 끌어올려 다음과 같이 변형됩니다.

function b() {
    function a() {}
    a = 10;
    return;
}
로그인 후 복사

Variable Scoping: Confined to the Scope

이제 삭제하겠습니다. 변수 범위 지정에 대한 조명. 우리 코드에서 a는 전역 범위에서 var로 선언된 다음 b 내에서 재정의됩니다. 함수 내에서 변수가 선언되면 해당 함수 범위 내에서만 액세스할 수 있습니다.

이 경우 b 내부에서 재정의된 변수 a는 함수에 대해 로컬입니다. 따라서 원래 전역 a는 영향을 받지 않습니다.

오해된 동작: 심층 분석

언뜻 보기에 선언 함수 a() {}는 다음과 같이 보일 수 있습니다. 함수 선언. 그러나 실제로는 함수형 객체를 정의하는 var a = function() {};과 동일합니다. 이는 함수 a() {}가 a라는 함수를 생성하는 것이 아니라 기존 a 변수를 새 함수로 다시 할당한다는 것을 의미합니다.

호이스팅 및 범위 지정 결합

함수 호이스팅과 변수 범위 지정을 결합하여 우리 코드는 기본적으로 다음을 수행합니다.

  1. 호이스트 b
  2. b 내에 지역 변수 a를 생성합니다.
  3. 전역 a를 10으로 재할당합니다.
  4. 값이 1인 전역 a에 경고합니다.

따라서 b 내에서 사용된 a는 b에 영향을 주지 않는 지역 변수이기 때문에 경고에 "1"이 표시됩니다. 글로벌 a.

위 내용은 이 JavaScript 코드는 왜 '1'을 반환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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