I.はじめに
私たちは、事前にコンパイルされたスクリプトにプリコンパイルされた関数の呼び出しについては、このセクションの話を話しています。
第二に、プリコンパイルされた関数呼び出し
1.プロセス
1.アクティブなオブジェクトAO(アクティブオブジェクト)を作成します。
2.プリコンパイル:
- スコープチェーンを生成する(スコープチェーン)
- 初期化引数
- 初期化パラメータ、パラメータの引数に割り当てられた値
- AOに参加するには、変数名に基づいて、すべての変数宣言を検索し、存在する場合、無視されます。
- AOの名前を付加する機能として、すべての関数宣言を見つけ、同じ名前の変数や関数がすでに存在する場合は、交換してください。
- この初期化
3.コードの実行を説明
2.解析
1.関数内で宣言されたすべての変数は、事前コンパイル段階の機能は、実際の書き込み位置の独立変数をすべて完了しています。
function f() {
console.log(aa); // undefined
var aa = 5;
console.log(aa); // 5
}
f();
复制代码
2.機能のすべての関数宣言、事前にコンパイルが完了した段階の機能は、実際の書き込み位置に無関係なすべての変数を宣言します。
function f() {
console.log(haha);
function haha() {
console.log(123);
}
}
f();
复制代码
3.関数は、同じ名前の変数と関数ならば、その関数は、変数を上書きします。
function f() {
console.log(haha);
var haha = 123;
function haha() {
console.log(456);
}
}
复制代码
4.関数は、変数のみをカバーすることができる機能は、機能が上書きできません。
function f() {
console.log(haha);
function haha() {
console.log(123);
}
var haha = 456;
}
f();
复制代码
この関数は、関数の宣言は、バック前の関数の宣言を上書きし、パラメータは無視されます。
function f() {
console.log(haha);
function haha(a) {
console.log('aaa');
}
function haha(a, b) {
console.log('bbb');
}
}
f();
复制代码
関数は、プリコンパイルされるとされていない場合、それはGOに達するまで6.ことは、あなたが変数や関数AOで定義された、独自の変数や関数を優先して、アクセスする必要が発生し、それが上位AOが定義されています。
var scope = 'global';
function t() {
console.log(scope); // undefined
var scope = 'local';
console.log(scope); // local
}
t();
console.log(scope); // global
复制代码