美文网首页
执行上下文栈和执行上下文(1)

执行上下文栈和执行上下文(1)

作者: 加加大叔 | 来源:发表于2017-05-02 23:23 被阅读0次

先说说栈吧!
栈的执行顺序是先进后出,后进先出!

执行上下文栈
执行全局代码和函数时,都会产生一个环境,叫做执行上下文。一开始打开页面的时候。全局环境(全局执行上下文)就会入栈。当执行到函数时,该函数也会产生一个执行环境,并入栈。(如果函数里包含另一个函数,同理)等该函数执行完了,就将该函数的执行环境弹出栈,返回全局上下文环境。

图片借鉴自王福朋大神的博客>﹏<

举个例子


当加载<script>中的代码时,全局执行环境入栈

当执行到 10 行的时候,sayHello执行环境入栈

sayHello中还有一个sayWorld环境,执行到该环境(第 8 行)的时候,sayWorld执行环境入栈


sayWorld执行完毕后,就弹栈,回到sayHello执行环境,再sayHello执行完毕后,弹栈。回到全局执行环境。关闭浏览器的时候,全局执行环境也弹出栈!

整个入栈弹栈过程

执行上下文
什么是执行上下文。个人理解为代码的执行环境。不同的代码有不同的执行环境。
一个执行上下文的生命周期分为两阶段。创建阶段和代码执行阶段
创建阶段是为该环境的代码执行先做好准备。

创建阶段:包括创建变量对象、建立作用域链?、确定this的指向

1、创建变量对象:
① 建立arguments对象和参数的赋值。

②函数声明:也就是使用function关键字声明的函数。在变量对象中以函数名建立一个属性,属性值为指向该函数所在内存地址的引用。如果函数名的属性已经存在,那么该属性将会被新的引用所覆盖。
③变量声明:
检查当前上下文中的变量声明,每找到一个变量声明,就在变量对象中以变量名建立一个属性,属性值为undefined。如果该变量名的属性已经存在,为了防止同名的函数被修改为undefined,则会直接跳过,原属性值不会被修改。

举个例子:



这里作用域链和this的指向先不讲

然后就是执行阶段了。
执行的时候,若代码需要获取变量或函数或对象,就会到变量对象中去取!
若执行到代码赋值(如var eye = 2)就更行变量对象中同名变量的变量值!
在基本变量未执行赋值的时候读取变量,会取得undefined!

先这样吧。


相关文章

  • 执行上下文(个人笔记)

    本文参考:javaScript执行上下文和执行上下文栈一篇文章看懂JS执行上下文什么是执行上下文?什么是调用栈? ...

  • 基础知识整理

    执行上下文栈 可执行代码: 1、全局代码 2、函数代码 3、eval代码 执行上下文栈: ECStack = [ ...

  • JavaScript函数定义和执行的一些理解--执行上下文和执行

    2、执行上下文和执行上下文栈 当JavaScript执行到一个函数时候,就会进行准备工作,也就是有个执行上下文。函...

  • 前端程序员面试你应该懂的原生JS——2

    1. 谈谈你对JS执行上下文栈和作用域链的理解。 执行上下文就是当前 JavaScript 代码被解析和执行时所在...

  • 执行上下文栈和执行上下文(1)

    先说说栈吧!栈的执行顺序是先进后出,后进先出! 执行上下文栈执行全局代码和函数时,都会产生一个环境,叫做执行上下文...

  • 变量函数提升与执行上下文

    变量与函数提升 作用域与执行上下文的区别 执行上下文 执行上下文栈 作用域 作用域链

  • 执行上下文

    [TOC] 1.执行上下文 1.什么是执行上下文? 简而言之,执行上下文是评估和执行 JavaScript 代码的...

  • 再学 this

    执行上下文主要分为三种:全局执行上下文、函数执行上下文、eval执行上下文。而this和执行上下文是相互绑定的,所...

  • 关于this指向

    1 首先this是和执行上下文绑定的,而执行上下文分为三种: (1) 全局执行上下文 在全局上下文中打印conso...

  • 深入浅出执行上下文、词法环境、变量环境

    执行上下文的概念 执行上下文:javascript 代码解析和执行时所在的环境。 执行上下文的类型 执行上下文分为...

网友评论

      本文标题:执行上下文栈和执行上下文(1)

      本文链接:https://www.haomeiwen.com/subject/yryhtxtx.html