黑马程序员技术交流社区

标题: 【上海校区】JavaScript执行上下文 [打印本页]

作者: 没名字i    时间: 2020-3-19 15:20
标题: 【上海校区】JavaScript执行上下文
本帖最后由 没名字i 于 2020-3-19 15:23 编辑

什么是执行上下文执行上下文可以理解是JavaScript代码执行的环境。JavaScript的运行环境分为三种:
全局环境:全局环境是指JavaScript执行的默认环境。如果是在浏览器的环境,那就会创建一个window对象;
函数环境:当函数被调用时会创建对于的上下文环境,会进入当前函数中执行代码,并且每次执行函数都会创建对于的执行环境;
eval环境:JavaScript中的eval函数执行内部代码创建的上下文环境,但是这个不推荐使用,具体可以查看eval作用~;
所以,一个JavaScript程序在运行的过程中,会产生多个执行上下文,其中有且只有一个是全局执行上下文。紧接着按照函数的调用顺序,每次调用到函数就会生成对应函数的执行上下文。
JavaScript管理执行上下文
一个页面的执行除了全局上下文还有各种函数调所产生的函数执行上下文,那么JavaScript是怎么管理这些执行上下文的呢?
对于单线程的JavaScript来说,它只能对这些上下文对象一个一个得执行。那如此多的上下文对象,他就必须按照一定的方式来执行,不然很乱哦。这个方式就是,JavaScript引擎会用栈的方式来处理这每一个执行上下文
JavaScript执行上下文过程在JavaScript中,用的方式来管理执行上下文,我们可以称它为执行栈,也可以叫做函数调用栈(Call Stack)。栈是遵循“先进后出,后进先出”的顺序来进行存储。

我们可以把理解成为一个只有一个开口的容器,先放进去的东西处于容器的最底部,而且如果要拿出来的话,它也是最后一个被拿出来(先进后出)。

在栈中,处于最底部的就是我们最开始创建的全局执行上下文对象,它永远是处于栈底。而处于栈顶就是当前正在执行的上下文。也就是当前执行的函数执行上下文会被放在栈顶。

栈的执行流程分为入栈、执行、出栈三个部分。

下面我们通过一个栗子来加深理解:



[AppleScript] 纯文本查看 复制代码
function text(){
    console.log('text')
    function text1(){
      console.log('text1')
    }
  text1()
}
text()

执行流程:



总结:





链接:https://juejin.im/post/5e72e405f265da57112650bc





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2