JavaScriptのプリコンパイル解説
4290 ワード
プリコンパイル
JSは解釈型言語で、実行中は順次実行しますが、ブロックを分けて先にコンパイルしてから実行します.
プリコンパイルを理解する前に、二つの概念を明確にする必要がある.
正常にはjsは3つのプロセスを経験します.1.言語解析------>文法的エラーと低レベルエラーがあるかどうかを確認します.プリコンパイル------>状況グローバル変数:GOオブジェクトの局部オブジェクトを作成します.AOオブジェクトを作成して、現在の作用領域でvar宣言の変数割り当て値をアップグレードします.前作用領域で宣言したすべての関数をアップグレードし、function 3を割り当てます.->各行のコード解析を実行すると、リフティングされた変数に再割り当てされます.
JSは解釈型言語で、実行中は順次実行しますが、ブロックを分けて先にコンパイルしてから実行します.
プリコンパイルを理解する前に、二つの概念を明確にする必要がある.
( ) ( )
変数の割り当て(昇格宣言)正常にはjsは3つのプロセスを経験します.1.言語解析------>文法的エラーと低レベルエラーがあるかどうかを確認します.プリコンパイル------>状況グローバル変数:GOオブジェクトの局部オブジェクトを作成します.AOオブジェクトを作成して、現在の作用領域でvar宣言の変数割り当て値をアップグレードします.前作用領域で宣言したすべての関数をアップグレードし、function 3を割り当てます.->各行のコード解析を実行すると、リフティングされた変数に再割り当てされます.
<script>
console.log(a)
var num = 10;
console.log(num)
var a = 20
foo()
function foo(){
console.log(acc)
var acc = 20
console.log(acc)
}
</script>
<script>
GO ( , )
var
var undefined
GO = {
num:undefined
a:undefined
}
undefined
!!
console.log(a)
a unedfined
console.log()
undefined
GO{
num:10;
a:undefined
}
console.log(num) GO num 10
AO
function foo() {
GO AO
具体的な流れはGOと同じですが、ここではスコープにつながります. AO GO
AO{
acc:undefined
}
console.log(acc);
undefined
var acc = 20
AO{
acc:20
}
AO acc
20
console.log(acc);
// AO