全局上下文GO
先上代码
console.log(a)
var a=1;
function a(){}
console.log(a)
console.log(b)
console.log(c)
var b = function(){}
function c(){}
答案:
ƒ a(){}
1
undefined
f c(){}
简单的说下全局上下文GO
GO:全局上下文,Global Object
,它在全局代码执行前产生
产生时会执行以下步骤
- 1.先找变量
- 2.再找函数,并赋值函数体
- 3.代码执行
分析下该题:
第一步,先找变量
GO={
a: undefined,
b: undefined
}
第二步,找函数,并赋值函数体
GO={
a: undefined ->function a(){},
b: undefined,
c: function c(){}
}
第三步,代码执行
GO={
a: undefined ->function a(){} ->1,
b: undefined->function(){},
c: function c(){}
}
函数上下文AO
上代码
function test(a,b){
console.log(a)
c=3;
var c;
a=4;
b=5;
console.log(b)
console.log(c)
function b(){}
function d(){}
console.log(b)
}
test(12)
答案:
12
5
3
5
AO:函数上下文,activation Object
是函数执行前,生成一个AO对象(在函数执行前的一瞬间会生成自己的AO,如果函数执行2次,生成了两次AO,这两次的AO是没有任何关联)
产生时会执行以下步骤
- 1.先找函数的形参和变量声明
- 2.把实参赋值给形参
- 3.再找函数,并赋值函数体
- 4.执行函数
第一步:找函数的形参和变量声明
AO={
a: undefined,
b: undefined,
c :undefined
}
第二步:把实参赋值给形参
AO={
a: undefined -> 12,
b: undefined,
c :undefined
}
第三步:找函数,并赋值函数体
AO={
a: undefined ->12,
b: undefined -> function b(){},
c :undefined
d: function d(){}
}
第四步:执行函数
AO={
a: undefined ->12 -> 4,
b: undefined -> function b(){} ->5,
c :undefined ->3
d: function d(){}
注意:
函数中的变量没有通过 var
关键字声明,不会被存放在 AO
中。