예비 해석

5323 단어 해석 하 다.
함수 예비 해석:
1. javascript 은 실행 하기 전에 '예비 해석' 과 유사 한 작업 을 합 니 다. 먼저 현재 실행 환경 에서 활동 대상 을 만 들 고 var 로 설명 하 는 변수, 정 의 된 함 수 를 활동 대상 의 속성 으로 설정 합 니 다. 그러나 이 변수의 할당 값 은 모두 undefined 입 니 다.
 
2. javascript 에서 실행 단 계 를 설명 하고 변 수 를 분석 해 야 할 때 현재 실행 환경의 활동 대상 에서 먼저 찾 습 니 다. 또한 이 실행 환경의 소유자 가 prototype 속성 이 있 을 때 prototype 체인 에서 찾 습 니 다. 그렇지 않 으 면 도 메 인 체인 으로 찾 습 니 다.var a =...........................................................................................
예 1:
function handle(){      
	 alert(arg1);       
   } ;  
     
   handle();       
   var arg1 = 20;

 결 과 는 undefined.var arg 1 = 20 까지 설명 하고 있 기 때 문 입 니 다.이 문장 은 이전에 arg 1 의 값 을 인쇄 했 는데, 이때 arg 1 에 값 을 부여 하지 않 았 다.
 
예 2:
 alert(handle);    
 var handle = function (){ 
        alert(20);     
 }; 

 결과: undefined
 
 
handle();

var handle=function (){
      alert("  ");
}

 결과: handle is not a function. handle () 을 실행 할 때 handle 에 값 을 부여 하지 않 았 기 때 문 입 니 다 – 함수 정의.하면, 만약, 만약...
 handle();    
 var handle = function handle (){ 
        alert(20);     
 }; 

 
IE 에서 대화 상자 가 팝 업 됩 니 다. var handle... 이 문 구 를 함수 정의 로 해석 하고 함수 정 의 는 사전 컴 파일 시 값 이 있어 야 하기 때문에 실행 할 수 있 습 니 다.그러나 FF 에 서 는 여전히 하나의 변수 로 만 설명 되 고 이 문장 이 실 행 될 때 만 값 을 부여 할 수 있다 는 것 을 알 고 있 습 니 다.
변수 가 초기 화 되 기 전에 변 수 를 사용 하 는 것 을 피해 야 하기 때문이다.
 
 
자 바스 크 립 트 는 해석 형 언어 라 는 것 은 의심 할 여지 가 없 지만, 실행 할 때 만 위 에서 아래로 한 마디 씩 해석 하 는 것 이 아 닙 니까?사실 또는 어떤 현상 은 그렇지 않다 는 것 을 증명 한다. 와 인터넷 관련 자 료 를 통 해 자바 스 크 립 트 가 '예비 해석' 행 위 를 하 는 것 을 알 수 있다.이 특성 을 이해 하 는 것 은 매우 중요 하 다. 그렇지 않 으 면 실제 개발 에서 해석 할 수 없 는 많은 문제 에 부 딪 히 고 심지어 프로그램 bug 의 존 재 를 초래 할 수 있다.이러한 현상 을 분석 하기 위해 서 는 자신의 학습 총화 로 서 본 고 는 자 바스 크 립 트 의 '예비 해석' 을 인식 하도록 유도 하고 자 합 니 다. 만약 에 제 견해 가 틀 리 면 지적 도 바 랍 니 다.
(1) 자바 스 크 립 트 가 실 행 될 때 위 에서 아래로 한 마디 씩 해석 된다 면 아래 코드 가 정확하게 실 행 될 수 있 는 것 은 이해 할 수 있 습 니 다. 함수 가 먼저 정 의 된 후에 호출 되 기 때 문 입 니 다.
function showMsg()
{
    alert('This is message');
}
showMsg(); // This is message
 
(2) 함수 가 코드 를 호출 한 후에 다음 코드 도 정상적으로 작 동 할 수 있다 는 것 을 알 고 있 습 니 다.쇼 Msg () 를 호출 할 때 쇼 Msg () 는 정의 되 지 않 은 것 처럼 보이 지만 정상적으로 작 동 할 수 있다 면 자바 스 크 립 트 는 '예비 해석' 임 을 나타 낸다.
showMsg(); // This is message
function showMsg()
{
    alert('This is message');
}
 
(3) 위 는 함수 의 예 이 고 아래 는 일반 변수의 예 를 하나 더 보 자.다음 예 를 들 어 실행 하면 undefined 가 나타 납 니 다. 첫 번 째 msg 가 정의 되 었 음 을 나타 냅 니 다. 초기 화 되 지 않 았 을 뿐 var msg 와 같 습 니 다.alert(msg);같은 거 야.아래 두 번 째 주석 을 지우 면 'msg 미 정의' 오류 가 발생 합 니 다.이것 또한 자 바스 크 립 트 가 '예 해석' 이라는 것 을 나타 낸다.
alert(msg); //undefined
var msg='This is message';
 
(4) 예 를 하나 더 보고 자 바스 크 립 트 의 '예 해석' 에 대한 인상 을 깊 게 한다.다음 코드 는 두 번 팝 업 대화 상자 가 모두 This is message 2 를 표시 하 는 것 을 볼 수 있 습 니 다. 왜 그 럴 까요?사실 다음 앞 뒤 에는 두 개의 동명 함 수 를 정 의 했 습 니 다. 뒤의 쇼 Msg () 는 앞에서 정 의 된 (자바 스 크 립 트 에서 동명 변수 처럼 덮어 쓰 는 문제 가 존재 합 니 다) 를 덮어 쓰 고 첫 번 째 쇼 Msg () 를 폐기 한 것 과 같 습 니 다.왜 두 번 째 호출 된 쇼 msg () 는 위 에서 정의 한 message 1 함 수 를 호출 하 는 것 이 아 닙 니까?이것 은 자바 스 크 립 트 가 '예비 해석' 행 위 를 하고 있다 는 것 을 다시 한 번 증명 한다.
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 '예비 해석' 은 변수 나 함 수 를 호출 할 수 있 는 환경 (변수 가 실 행 될 때 환경) 에 미리 해석 하 는 것 입 니 다.다음 코드 는 alert (msg) 이전에 msg 의 정 의 를 본 것 처럼 보이 지만 프로그램 이 실 행 될 때 'msg 미 정의' 오 류 를 보고 합 니 다. 이것 은 함수 에서 정 의 된 변 수 는 함수 의 개인 변수 이 고 외부 에서 직접 호출 할 수 없 기 때 문 입 니 다. 이것 은 JavaScript '예비 해석' 이 모든 정 의 된 변 수 를 하나의 전체 대상 에 통일 적 으로 해석 하 는 것 이 아니 라 window 와 같은 것 을 나타 냅 니 다.
function showMsg()
{
    var msg='This is message';
}
alert(msg); // msg   
 
(6) 자바 스 크 립 트 의 '예비 해석' 은 세그먼트 로 진행 되 며, 정확히 말 하면 < script > 블록 으로 나 누 어 진행 된다.다음 코드 는 같은 페이지 의 두 스 크 립 트 블록 에 나타 나 며 세 개의 동명 함 수 를 정의 합 니 다.프로그램 실행 결과 두 번 째 < script > 스 크 립 트 블록의 쇼 Msg () 는 앞의 두 쇼 Msg () 를 덮어 쓰 지 않 았 고, 첫 번 째 스 크 립 트 블록의 두 번 째 쇼 Msg () 는 첫 번 째 쇼 Msg () 를 덮어 썼 다.
<body>
<script type="text/javascript">
showMsg(); //This is message 2
function showMsg()
{
    alert('This is message 1');
}
function showMsg()
{
    alert('This is message 2');
}
</script>

<script type="text/javascript">
function showMsg()
{
    alert('This is message 3');
}
</script>
</body>
 원본:
http://archive.cnblogs.com/a/1984625/
참고:
http://varnow.org/?p=171
。。。

좋은 웹페이지 즐겨찾기