写在前面:一 直想系统的总结一下学过的javascript知识,喜欢这门语言也热爱这门语言。未来想从事前端方面的工作,提前把自己的知识梳理一下。前面写了些 DOM的知识,略觉水平有限。没几个月就要开赴找工作的前线,奈何自己还是个菜鸟,具体写的时候还没有一个完整的思路。多番考虑之后,决定还是翻译外国的 经典系列文章,总结提升的同时,英语水平也可以上一个台阶,双管齐下,相信对以后肯定有好处。当然这个系列的文章已经有好多人翻译过了,水平都挺高(我翻 译过之后参考了一些语句,在此感谢前辈)。要是你觉得我的很烂,还望轻拍砖。实在看不下去的,请绕行,重了会伤害我幼小的心灵的哦。

在此贴上本系列的英文地址:http://dmitrysoshnikov.com/tag/ecma-262-3/

引言

本文将会谈到ECMAScript的执行上下文(译者注:或者执行环境)和与此相关的各类型的可执行代码

每当控制器跳转到ECMAScript的执行代码中时,控制器也就进入了一个执行上下文。

执行上下文(EC):ECMA-262用来定义一段可执行代码的典型性和差异性的抽象概念。

标准文档没有从技术实现的角度准确定义EC的结构和类型。这应该是ECMAScript引擎在具体实现时考虑的问题。

逻辑上,一个动态执行上下文的集合形成了一个堆栈,栈的底部一般是全局执行上下文,顶部--当前(活动)执行上下文。通过压入(push)和推出(pop)各种执行上下文来修改这个栈.

可执行代码

可执行代码是一个与执行上下文这个抽象概念相联系的概念,在谈到可执行代码的同时,可能也就意味着一个执行上下文。

例如,我们定义一个执行上下文堆栈为一个数组 ECStack=[] 每当进入一个函数(即使是递归调用的函数或者是构造函数),这个堆栈就压入一个新的执行上下文,嵌入的eval函数也是一样的。

全局代码

这种代码在“程序层面”中执行:例如外部加载的js文件或者是本地内联代码(在<script></script>标签里)。全局代码不包含存在于函数体内的任何代码。初始化时(程序开始),ECStack如下:

1 ECStack=[globalContext];

函数代码段

当进入函数体(所有的函数),ECStack堆栈中压入了新的元素。必须要注意的是具体函数代码不包含它的内部函数代码段。例如,我们调用一个递归调用自身的函数:

1 (function foo(flag){
2     if(flag){
3         return;
4     }
5     foo(true);
6 })(false)

然后,ECStack堆栈修正如下:

1 //首先执行外部foo函数时
2 ECStack=[
3 <foo>functionContext
4 globalContext]
5 //递归执行内部foo函数时
6 ECStack=[
7 <foo>functionContext-递归foo
8 <foo>functionContext
9 globalContext]

当存在于当前执行上下文的函数返回时,ECStack弹出相应的执行上下文,这样连续的自上而下的执行,栈指针也不断移动,这是一个典型的堆栈实现方式。当相关段代码执行完以后,ECStack只包括全局上下文(global context),直到整个应用程序结束。一个被抛出但是没有被截获的异常,同样存在一个或多个执行上下文。

eval代码

(译者注:大量资深学者提出尽量不使用eval,而且此部分价值不大。减少阅读量,故不翻译)

这一小部分理论在未来进一步分析与执行上下文相关的一些细节问题,比如变量对象,作用域链时是很需要的。这些理论将在相关章节中提到。

转载于:https://www.cnblogs.com/mingwaer/p/3715678.html

javascript系列之执行上下文相关推荐

  1. JavaScript学习系列之执行上下文与变量对象篇

    一个热爱技术的菜鸟...用点滴的积累铸就明日的达人 正文 在上一篇文章中讲解了JavaScript内存模型,其中有提到执行上下文与变量对象的概念.对于JavaScript开发者来说,理解执行上下文与变 ...

  2. JavaScript深入之执行上下文栈

    顺序执行? 如果要问到 JavaScript 代码执行顺序的话,想必写过 JavaScript 的开发者都会有个直观的印象,那就是顺序执行,毕竟: var foo = function () {con ...

  3. 以及其任何超类对此上下文都是未知的_浏览器原理系列 - JS执行上下文详解(一):作用域

    本文主要介绍JS执行上下文相关的内容,理解了JavaScript的执行上下文才能更好地理解JavaScript语言本身以及该语言一些特性,如变量提升.作用域和闭包. 一.作用域 1.1 作用域 作用域 ...

  4. JavaScript 作用域与执行上下文

    JavaScript的作用域(scope)和执行上下文(execution context)总是纠缠不清,以至于网上出现了大量文章来区分这两个概念. MDN中是这样描述scope的: Scope Th ...

  5. JavaScript:执行上下文执行上下文栈

    在JavaScript概念中,有一个概念比较难以理解,它就是执行上下文和执行栈.最近在网上查阅了很多资料,现在把我的一些理解写出来,希望对各位有些帮助. 一.执行上下文 什么是执行上下文?是不是我们平 ...

  6. 一篇文章让你理解面试难点:执行上下文(干货满满(附面试题))

    在JavaScript的运行过程中,经常会遇到一些"奇怪"的行为,不理解为什么JavaScript会这么工作. 这时候可能就需要了解一下JavaScript执行过程中的相关内容了. ...

  7. 此上下文中不允许函数定义。_面试官:那我们来说说执行上下文吧

    当 JS 引擎处理一段脚本内容的时候,它是以怎样的顺序解析和执行的?脚本中的那些变量是何时被定义的?它们之间错综复杂的访问关系又是怎样创建和链接的?要解释这些问题,就必须了解 JS 执行上下文的概念. ...

  8. JavaScript进阶(一)--执行上下文

    在下工科生一枚,自认为文笔烂大街!本着总结JavaScript原理知识,提升自我写作水平的目的,提笔写下这几篇文章,喷子们高抬贵手?.写作过程中本系列过程中,我会尽快写完全部内容,再回过头来优化补充, ...

  9. 前端百题斩【010】——通俗易懂的JavaScript执行上下文

    写该系列文章的初衷是"让每位前端工程师掌握高频知识点,为工作助力".这是前端百题斩的第10斩,希望朋友们关注公众号"执鸢者",用知识武装自己的头脑. JavaS ...

最新文章

  1. @service注解_Spring 中 @Component、@Service 等注解如何被解析的
  2. C语言的那些秘密之---函数返回局部变量
  3. OSI七层模型,作用及其对应的协议
  4. 简单的防盗链技术(过滤器原理)
  5. Python基础--1.2 变量循环基础介绍
  6. java如何查看调用记录_查看Java记录
  7. 【虚拟主机篇】asp页面实现301重定向方法
  8. Google Analytics Advanced Configuration - Google Analytics 高级配置
  9. Nature调查:中国博士生们的科研围城
  10. ajax请求返回结果进入success还是error
  11. 日常赠书 | 王者荣耀的觉悟AI是怎么训练的?
  12. Codeforces Gym 100203G G - Good elements 暴力
  13. React 性能优化技巧总结
  14. 计算机网络基础学ppt,计算机网络基础学习情景.ppt
  15. pip 安装指定版本的库
  16. add a redfish schema
  17. 点成分享 | 麦氏比浊仪在药敏试验中的应用
  18. Flag Engine(动画系统)学习笔记(八)——动画混合
  19. 授权服务器文件包,单包授权认证(SPA)fwknop之安装和演示
  20. Hive的Metastore服务和Hiveserver2服务的详细说明

热门文章

  1. 当前元素_前端系列——获取页面中的DOM元素
  2. 兔子吃萝卜的c语言编程,狼追兔子的c语言实现
  3. 最长上升子序列 java_最长上升子序列 O(nlogn)解法 (java)
  4. mysql缓存淘汰机制_聊聊缓存淘汰算法-LRU 实现原理
  5. 反序列化 php R类型,pikachu-PHP反序列化、XXE、SSFR
  6. php隐藏路径ngnix,thinkphp框架在nginx环境下去掉index.php路径显示
  7. mysql最大值最小值_mysql最大值,最小值,总和查询与计数查询
  8. Oracle 单行函数
  9. 剑指offer:31-32记录(4道)
  10. 李牛(Linux)vi