在全局预编译的时候,会创建一个GO对象,这个GO对象(global object)等于window,会在全局执行上下文对象,进行变量提升和函数声明提升。
在函数预编译的时候,会创建一个AO对象(activation object),函数执行上下文对象,并且提升形参并且赋值以及各种声明的赋值。这时候,Scopes:函数的一个隐含属性,保存了执行上下文对象的集合,呈现 链式结构。
举例:(注意:函数声明的优先级高于变量声明)
var b = 456
function f1(a) {
console.log(a);
var a = 123;
function f2() {
console.log(a);
console.log(b);
}
f2();
}
f1(111)
GO:{
b:undefined,
f1:function f2() {
console.log(a);
console.log(b);
}
}
AO:{
a:111,//形参赋值
f2: function f2() {
console.log(a);
console.log(b);
}
}
练习:列出一下代码的GO对象和AO对象
console.log(test);//f
function test(test) {
console.log(test);//f
var test = 234;
console.log(test);//234
function test() { }
}
test(1);
var test = 123;