JavaScript学習ノート——プリコンパイル
19982 ワード
一般的にプリコンパイルは、関数宣言全体の昇格と変数宣言の昇格を簡単に要約されます.
関数の定義の回顧
まず関数のよく使われる二つの定義方法を振り返ってみます.関数宣言 関数式
関数プリコンパイルは、関数実行の直前に発生します. AOオブジェクトActivation Objectを作成します. モダリティおよび変数宣言を探して、モダリティおよび変数宣言をAOオブジェクト属性名として、値はundefined です.は、実参加の値を形参 に割り当てる.は、関数体に関数宣言を見つけました.属性名は関数名で、属性値は関数体 です.
実例
大域プリコンパイルは関数プリコンパイルとあまり違いません.グローバル実行前に発生しました. GOオブジェクトを作成する:実行期間コンテキスト(Global Object) 変数宣言を探して、属性としてGOオブジェクトに入れます.値はundefined です.関数宣言を探します.値は関数 に与えられます.
実例
面接問題1
関数の定義の回顧
まず関数のよく使われる二つの定義方法を振り返ってみます.
function test() {
...
}
var test = function() {
...
};
関数プリコンパイル4部作関数プリコンパイルは、関数実行の直前に発生します.
実例
function test(a, b) {
console.log(a);
console.log(b);
c = 0;
var c;
a = 3;
b = 2;
function b(){
}
function d(){
}
console.log(b);
}
test(1);
四部作に基づいて分析する.1. AO
AO {
}
2. , AO , undefined
AO {
a: undefined,
b: undefined,
c: undefined
}
3.
AO {
a: 1,
b: undefined,
c: undefined
}
4. , ,
AO {
a: 1,
b: function b() {
},
c: undefined,
d: function d() {
}
}
続いて、文を順番に実行します.function test(a, b) {
console.log(a); //1
console.log(b); //function b
c = 0;
a = 3;
b = 2;
console.log(b); //2
}
test(1);
グローバルプリコンパイル大域プリコンパイルは関数プリコンパイルとあまり違いません.グローバル実行前に発生しました.
実例
console.log(test);
function test(test) {
console.log(test);
var test = 234;
console.log(test);
function test () {
}
}
test(1);
var test = 123;
グローバルプリコンパイルを開始する前に1. GO
GO {
}
2. , GO , undefined
GO {
test: undefined、
}
3. ,
GO {
test: function test(test) {
...
}
}
実行ステートメントconsole.log(test);// function test(test) {...}
function test(test) {
console.log(test);
var test = 234;
console.log(test);
function test () {
}
}
test(1);
test = 123;
関数を実行する前に関数のプリコンパイルを行います.1. AO
AO {
}
2. , AO , undefined
AO {
test: undefined
}
3.
AO {
test: 1
}
4. , ,
AO {
test: function test () {
}
}
実行関数function test(test) {
console.log(test); // function test () {}
test = 234;
console.log(test); // 234
function test () {
}
}
二つの面接問題面接問題1
function bar() {
return foo;
foo = 10;
function foo() {
}
var foo = 11;
}
console.log(bar());
分析//GO {
// bar : function bar() {},
//}
function bar() {
return foo;
foo = 10;
function foo() {
}
var foo = 11;
}
//AO {
// foo: undefined => function foo() {},
//}
console.log(bar());//function foo() {}
面接問題2console.log(bar());
function bar() {
foo = 10;
function foo() {
}
var foo = 11;
return foo;
}
分析//GO {
// bar: function bar() {},
//}
//AO {
// foo: undefined => function foo(){} => 10 => 11
//}
console.log(bar()); //11
function bar() {
foo = 10;
function foo() {
}
var foo = 11;
return foo;
}