javascriptのプリコンパイル
801 ワード
function fn(a){
console.log(a);
var a = 123;
console.log(a);
function a (){}
console.log(a);
var b = function(){}
console.log(b);
function d(){}
}
fn(1);
以上のコードの出力結果は、過過ぎるa(){} 123
123
すぎる(){}
これは関数が実行される前の時点で、プリコンパイルのプロセスがあり、4ステップに分けられているからです.
1、AOオブジェクトを作成する、すなわち関数実行コンテキスト
2、形参と変数宣言を探して、変数と形参名をAO属性名として、値はundefinedです.
3、実務値とイメージを統一する
4、関数体の中で関数声明を探して、値は関数体に与えます.
fn(1)実行前の時点でAOオブジェクトの値は{a:function a()です. , b:undefined,d:function d(){}ですので、1文目の出力aの値を実行するときはfunction a(){}です.