你还要我怎样的JS系列(2)-- 执行上下文

2017-11-24  本文已影响0人  波比小金刚

执行上下文

本文地址

前言

当你熟悉了上一篇提到的<a href='memory.md'>内存空间</a>之后。我们再来接着梳理我们的JS轴线。JS好比是易筋经,学透彻了这门功夫,在茫茫快速迭代的前端海洋就有了本源核心,剩下的就是踩坑捡秘籍,打怪娶萧熏儿了。

内存空间是入门心法,教会我们怎么运用自身的丹田来存储气息,下一步就应该是学会怎么将气息顺着经脉发力了。

我们大致了解了我们写的代码是怎么样分配空间存储的,现在该探究是怎么运行的了。首先运行也得准备准备吧!

执行上下文 & 可执行代码

Execution context (abbreviated form — EC) is the abstract concept used by ECMA-262 specification for typification and differentiation of an executable code.

执行上下文(简称-EC)是一个抽象概念,ECMA-262标准用这个概念同可执行代码(executable code)概念进行区分。

当控制器转到一段可执行代码的时候就会进入到一个执行上下文。执行上下文是一个堆栈结构(先进后出),栈底部永远是全局上下文,栈顶是当前活动的上下文。其余都是在等待的状态,这也印证了JS中函数执行的原子性。

可执行代码与执行上下文是相对的,某些时刻二者等价。

所以,我们大声的用家乡话说一次就是:函数在调用的时候就为其创建一个执行上下文,压入上下文堆栈中。执行完了弹出去。或者是遇到了提前终止可执行代码进行的,比如return。

全局上下文在浏览器窗口关闭后出栈。

我们来看看可执行代码,大概是这样的三种:

  1. 全局代码
  2. 函数代码
  3. eval代码

我们使用数组来模拟一个上下文堆栈

ECStack = []
我们以前一般是这样理解的,eval劫持了foo内的作用域,全局环境中没有y声明了。

现在开始结合调用上下文理解吧!

参考

<a href='https://bclary.com/log/2004/11/07/#a-10'>ECMA-262 # 10</a></br>
<a href='https://github.com/mqyqingfeng/Blog/issues/4'>冴羽 blog</a></br>

下一章

<a href='vo.md'>执行上下文 1. vo</a>

结语

撸主实力有限,高手历来在民间,希望广提意见,补肾感激。欢迎star,对我也是一种鼓励。

上一篇下一篇

猜你喜欢

热点阅读