全局上下文GO与函数上下文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(){}

简单的说下全局上下文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 中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容