javascript笔记之理解执行上下文

每次当控制器转到ECMAScript可执行代码的时候,即会进入到一个执行上下文。执行上下文(简称-EC)是ECMA-262标准里的一个抽象概念,用于同可执行代码(executable code)概念进行区分。标准规范没有从技术实现的角度定义EC的准确类型和结构,这应该是具体实现ECMAScript引擎时要考虑的问题。

调用栈(活动的执行上下文组)在逻辑上组成一个堆栈。堆栈底部永远都是全局上下文(global context),而顶部就是当前(活动的)执行上下文。堆栈在EC类型进入和退出上下文的时候被修改(推入或弹出)。

本来想写一篇关于执行上下文和调用栈的内容,在简书上看到了波神写的一篇博文,讲的特别清楚,我就不献丑了,链接在这里我是传送门,拿去不谢。

特别注意:调用栈和作用域链没有关系,作用域链是由函数所在的位置确定的,而调用栈是函数执行的时候确定的,代码位置和执行位置,可能隔着十万八千里。

自己一点理解,因为JavaScript单线程的特性,为了保证程序在函数执行完成以后,能够回到原来的地方继续执行,程序需要记住当前的位置,这个记住当前的位置的过程,就是将当前位置放入调用栈,当执行完成,并且没有形成闭包时,弹出调用栈。

下面三个链接,可以通过动画的方式,很直观的看到调用栈的整个过程。

普通调用 1+1+1

嵌套调用 1>2>3

递归