プリコンパイルを使いこなす
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オブジェクトの属性名として、値は関数体として、変数名やイメージ名と重名があれば、直接関数体は属性値を上書きします.
スクリプトは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');
}
}