>웹 프론트엔드 >JS 튜토리얼 >JavaScript 사전 파싱의 원리와 구현에 대한 자세한 설명

JavaScript 사전 파싱의 원리와 구현에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-14 15:32:231382검색

JavaScript는 의심할 여지 없이 해석되는 언어이지만 런타임 시 문장별로 위에서 아래로만 구문 분석됩니까?

(1) JavaScript가 런타임 시 위에서 아래로만 구문 분석되는 경우 먼저 함수를 정의한 다음 호출하기 때문에 다음 코드가 올바르게 실행될 수 있다는 것을 이해할 수 있습니다.

function showMsg() 
{ 
alert('This is message'); 
} 
showMsg(); // This is message

(2) 코드를 호출한 후에 함수를 정의할 수 있다는 것도 알고 있으며, 다음 코드도 정상적으로 작동할 수 있습니다. showMsg()가 호출될 때 showMsg()가 아직 정의되지 않은 것 같지만 정상적으로 작동하며 이는 JavaScript가 "사전 구문 분석"되었음을 나타냅니다.

showMsg(); // This is message 
function showMsg() 
{ 
alert('This is message'); 
}
(3) 위는 함수의 예이고, 다음은 일반적인

변수

의 또 다른 예입니다. 다음 예제를 실행하면, 첫 번째 문장의 msg가 정의되었지만 초기화되지 않았음을 나타내는 undefed가 팝업됩니다. var msg; 아래 두 번째 문장에

코멘트를 달면 "msg is not Defined" 오류가 보고됩니다. 이는 또한 JavaScript가 "사전 구문 분석"되었음을 나타냅니다.

alert(msg); //undefined 
var msg='This is message';
(4) JavaScript "사전 구문 분석"에 대한 인상을 깊게 하기 위해 또 다른 예를 살펴보겠습니다. 다음 코드에서는 두 번 팝업되는 대화 상자에 메시지 2가 표시되는 것을 볼 수 있습니다. 왜 그럴까요? 실제로 아래에서 동일한 이름을 가진 두 함수가 차례로 정의됩니다. 이후의 showMsg()는 이전에 정의된 함수를 덮어씁니다(JavaScript에서는 동일한 이름을 가진 변수도 덮어쓰기 문제가 있음). 이는 첫 번째 showMsg()를 의미합니다. 폐기됩니다. showMsg()의 두 번째 호출이 위에 정의된 메시지 1 함수를 호출하지 않는 이유는 무엇입니까? 이는 JavaScript에 "사전 구문 분석" 동작이 있음을 다시 한 번 증명합니다.
showMsg(); // This is message 2 
function showMsg() 
{ 
alert('This is message 1'); 
} 
showMsg(); // This is message 2 
function showMsg() 
{ 
alert('This is message 2'); 
}
(5) JavaScript "사전 구문 분석"은 변수나 함수를 호출할 수 있는 환경(가변 런타임 환경)으로 사전 구문 분석하는 것입니다. 다음 코드는 경고(msg) 이전에 msg의 정의를 본 것으로 보이지만 프로그램은 여전히 ​​"msg가 정의되지 않았습니다"라는 오류를 보고합니다. 이는 함수에 정의된 변수가 함수의 전용 변수이므로 이를 알 수 없기 때문입니다. 이는 JavaScript "사전 구문 분석"이 정의된 모든 변수를 window와 같은 전역 객체

로 구문 분석하는 것을 의미하지 않음을 나타냅니다.

function showMsg() 
{ 
var msg='This is message'; 
} 
alert(msg); // msg未定义

(6) JavaScript "사전 구문 분석"은 섹션 또는 정확하게는 3f1c4e4b6b16bbbd69b2ee476dc4f83a 블록에서 수행됩니다. 다음 코드는 동일한 페이지의 두 스크립트 블록에 나타나며 동일한 이름을 가진 세 개의 함수를 정의합니다. 프로그램 실행 결과는 두 번째 스크립트 블록의 showMsg()가 처음 두 개의 showMsg()를 포함하지 않는 반면, 첫 번째 스크립트 블록의 두 번째 showMsg()는 첫 번째 showMsg()를 포함함을 보여줍니다.

아아아아

위 내용은 JavaScript 사전 파싱의 원리와 구현에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.