全局上下文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(){}
簡(jiǎn)單的說下全局上下文GO
GO:全局上下文,Global Object,它在全局代碼執(zhí)行前產(chǎn)生
產(chǎn)生時(shí)會(huì)執(zhí)行以下步驟
- 1.先找變量
- 2.再找函數(shù),并賦值函數(shù)體
- 3.代碼執(zhí)行
分析下該題:
第一步,先找變量
GO={
a: undefined,
b: undefined
}
第二步,找函數(shù),并賦值函數(shù)體
GO={
a: undefined ->function a(){},
b: undefined,
c: function c(){}
}
第三步,代碼執(zhí)行
GO={
a: undefined ->function a(){} ->1,
b: undefined->function(){},
c: function c(){}
}
函數(shù)上下文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:函數(shù)上下文,activation Object是函數(shù)執(zhí)行前,生成一個(gè)AO對(duì)象(在函數(shù)執(zhí)行前的一瞬間會(huì)生成自己的AO,如果函數(shù)執(zhí)行2次,生成了兩次AO,這兩次的AO是沒有任何關(guān)聯(lián))
產(chǎn)生時(shí)會(huì)執(zhí)行以下步驟
- 1.先找函數(shù)的形參和變量聲明
- 2.把實(shí)參賦值給形參
- 3.再找函數(shù),并賦值函數(shù)體
- 4.執(zhí)行函數(shù)
第一步:找函數(shù)的形參和變量聲明
AO={
a: undefined,
b: undefined,
c :undefined
}
第二步:把實(shí)參賦值給形參
AO={
a: undefined -> 12,
b: undefined,
c :undefined
}
第三步:找函數(shù),并賦值函數(shù)體
AO={
a: undefined ->12,
b: undefined -> function b(){},
c :undefined
d: function d(){}
}
第四步:執(zhí)行函數(shù)
AO={
a: undefined ->12 -> 4,
b: undefined -> function b(){} ->5,
c :undefined ->3
d: function d(){}
注意:
函數(shù)中的變量沒有通過 var關(guān)鍵字聲明,不會(huì)被存放在 AO 中。