执行上下文


当函数执⾏时,会创建⼀个称为执⾏上下⽂(execution contex)的环境,分为创建和执⾏2个阶段

创建阶段

创建阶段,指函数被调⽤但还未执⾏任何代码时,此时创建了⼀个拥有 3 个属性的对象:

executionContext	=	{				
	scopeChain:	{},		//	创建作⽤域链(scope	chain)				
	variableObject:	{},		//	初始化变量、函数、形参				
	this:	{}		//	指定this 
}

代码执行阶段

代码执⾏阶段主要的⼯作是:
1、分配变量、函数的引⽤,赋值。
2、执⾏代码。

举个栗⼦

//	⼀段这样的代码
function	demo(num)	{
  var	name	=	'aaa';
  var	getData	=	function	getData()	{};
  function	c()	{}
}
demo(100);
//	创建阶段⼤致这样,在这个阶段就出现了【变量提升(Hoisting)】
executionContext	=	{
  scopeChain:	{	...	},
  variableObject:	{
    arguments:	{		//	创建了参数对象												
      0:	100,												
      length:	1								
    },								
    num:	100,		//	创建形参名称,赋值/或创建引⽤拷⻉								
    c:	pointer	to	function	c()		//	有内部函数声明的话,创建引⽤指向函数体								
    name:	undefined,	//	有内部声明变量a,初始化为undefined								
    getData:	undefined			//	有内部声明变量b,初始化为undefined				
   },				
  this:	{	...	} 
}

//	代码执⾏阶段,在这个阶段主要是赋值并执⾏代码 
executionContext	=	{				
  scopeChain:	{	...	},				
  variableObject:	{								
    arguments:	{												
      0:	100,												
      length:	1								
    },								
    num:	100,								
    c:	pointer	to	function	c()								
    name:	'xiaowa',		//	分配变量,赋值								
    getData:	pointer	to	function	getData()	//	分配函数的引⽤,赋值				
  },				
  this:	{	...	} 
}

执行上下文栈

  • 浏览器中的JS解释器是单线程的,相当于浏览器中同⼀时间只能做⼀个事情。
  • 代码中只有⼀个全局执⾏上下⽂,和⽆数个函数执⾏上下⽂,这些组成了执⾏上下⽂栈 (Execution Stack)。
  • ⼀个函数的执⾏上下⽂,在函数执⾏完毕后,会被移出执⾏上下⽂栈。

举个栗⼦

function	c(){				
	console.log('ok'); 
} 
function	a(){				
	function	b(){								
		c();				
	}				
	b(); 
} 
a();

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玳宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值