Javascript学习-执行上下文(Execution Contexts)

本文详细解析了JavaScript中的执行上下文概念,包括全局上下文、函数代码执行上下文及eval代码执行上下文,并通过实例说明了这些上下文如何在ECStack中进行管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一。ECStack

执行上下文是一个堆栈,每次进入function时,则会将该function context压入栈,当从function 退出时候,则会从ECStack弹出该Function context.

二。Global Contexts

在程序初始化时候,则会压入到ECStacks中,例如:

 

ECStack = [
  globalContext
];

三。Function Code

当执行进入Function时,ECStack 将会push 进一个新的Item,需要注意的是,该新的Item不包含Function内部的Funtion.

 

(function foo(flag) {
  if (flag) {
    return;
  }
  foo(true);
})(false);
当递归执行foo时候,ECStack的状况表现如下:
// first activation of foo
ECStack = [
  <foo> functionContext
  globalContext
];
  
// recursive activation of foo
ECStack = [
  <foo> functionContext – recursively 
  <foo> functionContext
  globalContext
];

 

对于抛出未被catch的异常,将会导致从一个或者多个Context中退出。

四。Eval Code

eval 定义的变量和函数,影响的是调用该 eval的context,例如:

// influence global context
eval('var x = 10');
 
(function foo() {
  // and here, variable "y" is
  // created in the local context
  // of "foo" function
  eval('var y = 20');
})();
  
alert(x); // 10
alert(y); // "y" is not defined
ECStack = [
  globalContext
];
  
// eval('var x = 10');
ECStack.push({
  context: evalContext,
  callingContext: globalContext
});
 
// eval exited context
ECStack.pop();
 
// foo funciton call
ECStack.push(<foo> functionContext);
 
// eval('var y = 20');
ECStack.push({
  context: evalContext,
  callingContext: <foo> functionContext
});
 
// return from eval 
ECStack.pop();
 
// return from foo
ECStack.pop();

转载于:https://www.cnblogs.com/lily-tiantian/p/4330075.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值