JavaScript前解析詳細

2923 ワード

まず、JSの事前解析とJSプログレッシブの関係をはっきりさせます.実際にはそれらの2つは衝突していません.1つの例はそれらの関係を簡単に理解します.
ホテルで食事をします.食事の前にメニューを見て、注文します.でも、食べる時は一口で食べます.
一、jsの事前解析は何ですか?
       プログラムに使う材料(変数、関数)に初期値を与えて、表の中に並存しています.その行にプログラムが実行されると、この表に初期値があるかどうかを見に来ます.
二、どのような場合に事前解析が行われますか?
1、ラベルが合っている場合;
2、関数に会った時;
三、jsは何を解析しますか?
1、関数参照の変数
2、varの後の変数
3、関数
四、jsはこれらの変数、関数にどのような初期値を与えますか?
1、すべてのパラメータを直接に割り当てます.
2、凡是varのものは、undefinedを初期値として付与します.
3、すべての関数は、直接関数自体を初期値として付与します.したがって、なぜ関数宣言の前に呼び出すことができますか?
五、どのような状況で予備解析に与えられた初期値が変わりますか?
値付け機能のある記号:=,+=,-=,*=,/=,+,--など(追加があれば.)
 alert(a);    //undefined
 var a = 0;
alert(a);    //0, =         
alert(a);    //function a(){ alert('    ') },  undefined   ,      ,        !
 var a = '    ';
function a(){ alert('    ') }
 alert(a);    //'    ', =        
alert(a);    //function a(){ alert('    ') },  undefined   ,      ,        !
 a++;
 alert(a);    //NaN, ++       
 var a = '    ';
 function a(){ alert('    ') }
 alert(a)    //'    ', =        
alert(a);    //undefined
var a = 0;
alert(a);    //0
function fn(){
    alert(a);    //undefined;    ,       
    var a = 2;
    alert(a);    //2
}
fn()
alert(a);    //0,fn   a    a        
alert(a);    //undefined
var a = 0;
alert(a);    //0
function fn(){
    alert(a);    //0 js          (var),        ,           
    a = 2;
   alert(a);  //2

}
fn()
alert(a);    //2,fn     a   
function fn(a){
   alert(a);    //undefined,JS      var    ,    fn         --> var a;
   a = 2;
   alert(a);    //2,           ,   fn      
}
fn()
alert(a);    //  

alert(a);    //  ,    <script>    ,           ,              ,      ,     a,     



alert(a);    //undefined
var a = 0;
alert(a);    //0

var a;    



alert(a);    //undefined,    <script>       a,      ,    <script>     ,   undefined


   alert(a); //  ,        



  var a; 
この つの の いを ます.
1 alert(a);    //function a(){ alert('    ') }
2 function a(){ alert('    ') }
1 alert(a);    //undefined,    ,  var,     undefined
2 var a = function (){ '    ' }