1、js运行三部曲
语法分析 预编译 执行
2、预编译过程
GO: global Object
1、创建GO对象
2、找变量声明,值赋undefined
3、找函数声明,值赋函数体
4、执行
AO-: activity Object 执行期上下文
1、创建AO对象
2、找形参和变量声明,值赋undefined
3、形参与实参相统一
4、找函数声明,值赋函数体
5、执行
练习1
/* GO{
C:undefined 10
test:function test(){}
}
AO{
b:undefined 1 2
} */
console.log(c); //undefined
var c = 10;
console.log(c); //10
function test(b) {
b = b + 1;
console.log(b); //2
}
test(1);
练习2
/* AO(执行期上下文)预编译过程
1、AO对象
2、找形参和变量声明,值赋undefine
3、将实参和形参统一
4、找函数声明,值赋函数体
5、执行 */
/* AO{
a:undefined 1 function a() {} 123
b:undefined function() {}
d:function d(){}
} */
test2(1);
function test2(a) {
console.log(a); //function a() {}
var a = 123;
console.log(a); //123
function a() {};
console.log(a); //123
var b = function() {}
console.log(b); //function() {}
function d() {}
console.log(d); //function d(){}
}
练习3
/* AO{
a:undefined 1 function a() {} 123
b:undefined 234 function() {}
} */
test3(1);
function test3(a, b) {
console.log(a); //function a() {}
console.log(b); //undefined
var b = 234;
console.log(b); //234
a = 123;
console.log(a); //123
function a() {};
var a;
var b = function() {};
console.log(a); //123
console.log(b); //function() {}
}