全局上下文GO與函數(shù)上下文AO

全局上下文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 中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容