プリコンパイルを使いこなす

2492 ワード

はじめにjavascriptは解釈型言語である.解釈型言語である以上、コンパイル行であり、実行行である.
スクリプトはJsエンジンステップを実行します.
文法分析:エンジンがあなたのコードを確認します.低レベルの文法エラーがコンパイルされていますか?簡単に理解すると、メモリの中にいくつかの空間が開けられます.いくつかの変数と関数を保存して実行を説明します.コードの実行を開始します.
2つのタイプ:
JSスコープの特徴に基づいて,二つの態様に分けて見られた.一つはグローバルのプリコンパイルで、一つは関数のプリコンパイルです.グローバルプリコンパイルであれ、関数プリコンパイルであれ、まずアクティブオブジェクトを作成します.実行期間コンテキストとも言えます.
大域プリコンパイルの場合はGOオブジェクト、関数プリコンパイルは関数による個別のAOオブジェクトです.
一、プリコンパイルはscriptコード実行前にGlobal Object GOが発生した:
1.scriptタグに入るとコードを実行したい瞬間に、GOオブジェクトを作成します.変数宣言を見て、varキーワード宣言の変数を、GOオブジェクトの属性名として、値はundefined 3となります.関数宣言を見て、関数名をGOオブジェクトの属性名として、値は関数体となります.例えば、変数名と名前を重名として、直接関数体は属性値を上書きします.
二、プリコンパイルは、関数実行前にActive Obejct AOが発生します.
1.関数実行の直前にAOオブジェクト2を生成します.パラメータを見て、AOオブジェクトの属性名として、実参をAOオブジェクトの属性値2とします.変数宣言を見て、varキーワード宣言の変数をAOオブジェクトの属性名として、値はundefinedです.名前と重複している場合は、それを無視します.3.関数宣言を見て、関数名をAOオブジェクトの属性名として、値は関数体として、変数名やイメージ名と重名があれば、直接関数体は属性値を上書きします. : if for... function JSプリコンパイルの例 1:
var a = 1;
function b() {
console.log(a); // undefined
a = 2;
console.log(a);// 2
var a = 3;
console.log(a);// 3
}
console.log(a);//1
b();
console.log(a);// 1

     :
GO = {}
GO = {
     a: undefined,
     b: function b()
 }
 b.AO = {}
 b.AO = {
     a: undefined
 }
    :
//var a = 1;
GO = {
    a: 1,
    b: function b()
}
//a = 2;
b.AO = {
    a: 2
}
//var a = 3;
b.AO = {
    a: 3
}

       b     var a = 3      ,  b        undefined,
           ,         ,      a   
2:
var f = true;
if (f === true) {
var a = 10;
}
function fn() {
var b = 20;
c = 30;

}
fn();
console.log(a); // 10
console.log(c); // 30
console.log(b); //   

  fn    ,             c,           b,
 fn        ,b     ,  f true,     if  a  
3:
console.log(foo); // function foo(){console.log('C');}
var foo = 'A';
 console.log(foo); // A
 var foo = function() {
     console.log('B');
 }
 console.log(foo); // function() {console.log('B'); }
 foo();

 function foo() {
     console.log('C');
 }
 console.log(foo);// function() {console.log('B'); }
 foo(); //B

      
 GO = {}
      
 GO = {
     foo: undefined,
 }
      
 GO = {
     foo: function foo() {
         console.log('C');
     }
 }

       
 // console.log(foo); 
 foo.AO = {}
     // var foo = 'A';
 foo.AO = {
     foo: 'A'
 }
 foo.AO = {
     foo: function() {
         console.log('B');
     }
 }