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 변수를 새 함수로 다시 할당한다는 것을 의미합니다.
호이스팅 및 범위 지정 결합
함수 호이스팅과 변수 범위 지정을 결합하여 우리 코드는 기본적으로 다음을 수행합니다.
따라서 b 내에서 사용된 a는 b에 영향을 주지 않는 지역 변수이기 때문에 경고에 "1"이 표시됩니다. 글로벌 a.
위 내용은 이 JavaScript 코드는 왜 '1'을 반환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!