浅談jsプリコンパイル
JSの二つの特徴
1,単一スレッド言語,単一スレッドとは何か,つまりJSは同一時間に1つのことしかできないということであり,HTML 5でJSが複数のスレッドを作成できると提案されているとしても,メインスレッドによって制御され,DOMを操作することはできない.だから本質的には、JSは単一スレッド言語です.2、解釈言語、すなわち翻訳は一言実行しますが、本当に直接的ではありません.
私たちはaがundefinedでbが直接間違っていることを発見しました.ここからJSは単純な意味での翻訳ではなく、1つの文を実行しているのを見ることができます.そうしないと、aは直接間違っているはずです.次のは実行しません.実はJS実行は3ステップに分かれています.
1、文法分析全編スキャンで低級な間違いがあるかどうか(括弧を少なく書いたり、中国語の句読点を書いたりしない).
2、プリコンパイル
3,解釈実行解釈1行1行実行.
ここで理解するのは、プリコンパイルの一環であり、プリコンパイルを理解するには、まずglobal(グローバル変数)という単語を知る必要があります.1,すべての宣言されていない割り当ては、グローバルオブジェクト(window)のすべてです.
2.グローバル範囲で宣言されるグローバル変数はすべてグローバル属性です.
まず、プリコンパイルの手順を見てみましょう.プリコンパイルは関数プリコンパイルとグローバルプリコンパイルに分けられます.まず関数を見てみましょう.それから、グローバルプリコンパイルは簡単です.関数プリコンパイル4部作: AOオブジェクトActivation Objectを作成する.(実行期間コンテキスト); 形パラメータと変数宣言を探し、変数と形パラメータ名をAOの属性名とし、値はundefinedである. 実パラメータ値とパラメータを統一する. 関数体の中で関数宣言を探して、値はその関数体です.
直接書いてもよくわからないのでJS問題で検証できます
この問題を見たらまず慌てないで、手順に従って一歩一歩来てください.1,AOオブジェクトActivation Object(実行期間コンテキスト)の作成
2,形のパラメトリックと変数の宣言を探して、変数と形のパラメトリック名をAOの属性名として、値はundefinedです;上から下へのプローブパラメータと変数宣言は、undefinedを割り当て、同名の下の上書きに遭遇します.実パラメータ値とパラメータを統一する.aの実パラメータは1 であることが分かった.関数体の中で関数宣言を探して、値はその関数体です.aとdは関数宣言であり、彼らに関数体を付与し、bは関数式であるため、このステップは行わない.
これでプリコンパイルが完了し、プリコンパイルは関数の実行の直前になるので、プリコンパイルが完了すると、関数が実行されます.
基本関数のプリコンパイルはこのように悪くなく、もう一つは関数が自分のAOオブジェクトで変数が見つからないとき、グローバルオブジェクトGOすなわちwindowで探し、見つからないとエラーを報告することです.
グローバルプリコンパイル三部作 GOオブジェクトの作成:実行期間コンテキスト(Global Object)GO==window 変数宣言を探し、属性としてGOオブジェクトに配置し、値はundefined である.関数宣言を探し、値は関数体 に与えられる.
グローバルなプリコンパイルは関数と同様に、パラメータがないため、より簡単に見えますが、私はあまり説明しません.
それからこれは主に多く覚えて多く問題をして、熟練してマスターすることができます.私はここでいくつかの問題を書いているので,みんなは自分で見てもいいです.
入社して間もない小先端はこれから自分の技術共有の旅を始め、アドバイスと批判を歓迎します.
1,単一スレッド言語,単一スレッドとは何か,つまりJSは同一時間に1つのことしかできないということであり,HTML 5でJSが複数のスレッドを作成できると提案されているとしても,メインスレッドによって制御され,DOMを操作することはできない.だから本質的には、JSは単一スレッド言語です.2、解釈言語、すなわち翻訳は一言実行しますが、本当に直接的ではありません.
console.log(a) // undefined
console.log(b) //
var a = 10;
私たちはaがundefinedでbが直接間違っていることを発見しました.ここからJSは単純な意味での翻訳ではなく、1つの文を実行しているのを見ることができます.そうしないと、aは直接間違っているはずです.次のは実行しません.実はJS実行は3ステップに分かれています.
1、文法分析全編スキャンで低級な間違いがあるかどうか(括弧を少なく書いたり、中国語の句読点を書いたりしない).
2、プリコンパイル
3,解釈実行解釈1行1行実行.
ここで理解するのは、プリコンパイルの一環であり、プリコンパイルを理解するには、まずglobal(グローバル変数)という単語を知る必要があります.1,すべての宣言されていない割り当ては、グローバルオブジェクト(window)のすべてです.
function text(){
b = 10;
}
text();
console.log(window.b) // 10
2.グローバル範囲で宣言されるグローバル変数はすべてグローバル属性です.
var a = 12;
console.log(window.a) // 12
まず、プリコンパイルの手順を見てみましょう.プリコンパイルは関数プリコンパイルとグローバルプリコンパイルに分けられます.まず関数を見てみましょう.それから、グローバルプリコンパイルは簡単です.関数プリコンパイル4部作:
直接書いてもよくわからないのでJS問題で検証できます
function fn(a){
console.log(a);
var a = 123;
console.log(a);
function a(){
};
console.log(a)
console.log(b)
var b = function (){
}
console.log(b);
function d(){
}
}
fn(1);
この問題を見たらまず慌てないで、手順に従って一歩一歩来てください.1,AOオブジェクトActivation Object(実行期間コンテキスト)の作成
AO{
}
2,形のパラメトリックと変数の宣言を探して、変数と形のパラメトリック名をAOの属性名として、値はundefinedです;上から下へのプローブパラメータと変数宣言は、undefinedを割り当て、同名の下の上書きに遭遇します.
AO{
a : undefined,
b : undefined,
d : undefined
}
AO{
a : 1,
b : undefined,
d : undefined
}
AO{
a : function a(){
},
b : undefined,
d : function d(){
}
}
これでプリコンパイルが完了し、プリコンパイルは関数の実行の直前になるので、プリコンパイルが完了すると、関数が実行されます.
function fn(a){
console.log(a); //function a (){} a a AO , a ,
var a = 123;
console.log(a); // 123 b , 123, a 123
function a(){
}
console.log(a); // 123 a ,
console.log(b) ; // undefined AO b undefined
var b = function (){
}
console.log(b); // function(){} b , , b 。
function d(){
}
}
fn(1)
基本関数のプリコンパイルはこのように悪くなく、もう一つは関数が自分のAOオブジェクトで変数が見つからないとき、グローバルオブジェクトGOすなわちwindowで探し、見つからないとエラーを報告することです.
グローバルプリコンパイル三部作
console.log(a) // undefined GO{a;undefined,text:function text () {} } a undefined
function text(){
}
console.log(b) //
var a = 10;
グローバルなプリコンパイルは関数と同様に、パラメータがないため、より簡単に見えますが、私はあまり説明しません.
それからこれは主に多く覚えて多く問題をして、熟練してマスターすることができます.私はここでいくつかの問題を書いているので,みんなは自分で見てもいいです.
function test(a, b) {
console.log(a);
console.log(b);
var b = 234;
console.log(b);
a = 123;
console.log(a);
function a() {
}
var a;
b = 234;
var b = function () {
}
console.log(a);
console.log(b);
}
text(1)
console.log(test);
function test() {
console.log(test);
var test = 234;
console.log(test);
function test() {
}
}
test(1)
global = 100;
function fn() {
console.log(global);
global = 200;
console.log(global);
var global = 300;
}
fn();
入社して間もない小先端はこれから自分の技術共有の旅を始め、アドバイスと批判を歓迎します.