javascript系列之执行上下文
写在前面:一 直想系统的总结一下学过的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堆栈中压入了新的元素。必须要注意的是具体函数代码不包含它的内部函数代码段。例如,我们调用一个递归调用自身的函数:
(function foo(flag){
if(flag){
return;
}
foo(true);
})(false)
然后,ECStack堆栈修正如下:
//首先执行外部foo函数时
ECStack=[
<foo>functionContext
globalContext]
//递归执行内部foo函数时
ECStack=[
<foo>functionContext-递归foo
<foo>functionContext
globalContext]
当存在于当前执行上下文的函数返回时,ECStack弹出相应的执行上下文,这样连续的自上而下的执行,栈指针也不断移动,这是一个典型的堆栈实现方式。当相关段代码执行完以后,ECStack只包括全局上下文(global context),直到整个应用程序结束。一个被抛出但是没有被截获的异常,同样存在一个或多个执行上下文。
| eval代码 |
(译者注:大量资深学者提出尽量不使用eval,而且此部分价值不大。减少阅读量,故不翻译)
这一小部分理论在未来进一步分析与执行上下文相关的一些细节问题,比如变量对象,作用域链时是很需要的。这些理论将在相关章节中提到。
javascript系列之执行上下文的更多相关文章
- JavaScript学习系列之执行上下文与变量对象篇
一个热爱技术的菜鸟...用点滴的积累铸就明日的达人 正文 在上一篇文章中讲解了JavaScript内存模型,其中有提到执行上下文与变量对象的概念.对于JavaScript开发者来说,理解执行上下文与变 ...
- [JavaScript深入系列]JavaScript深入之执行上下文栈(转载)
顺序执行? 如果要问到 JavaScript 代码执行顺序的话,想必写过 JavaScript 的开发者都会有个直观的印象,那就是顺序执行,毕竟: var foo = function () { co ...
- JavaScript内部原理系列-执行上下文(Execution Context)
概要 本文将向大家介绍ECMAScript的执行上下文以及相关的可执行代码类型. 定义 每当控制器到达ECMAScript可执行代码的时候,控制器就进入了一个执行上下文.执行上下文(简称:EC)是个抽 ...
- JavaScript深入之执行上下文栈
如果要问到 javascript 代码执行顺序的话,想必写过javascript的开发者都会有个直观的印象,那就是顺序执行,例如: var foo = function(){ console.log( ...
- 【进阶1-2期】JavaScript深入之执行上下文栈和变量对象(转)
这是我在公众号(高级前端进阶)看到的文章,现在做笔记 https://mp.weixin.qq.com/s/hZIpnkKqdQgQnK1BcrH6Nw 阅读笔记 JS是单线程的语言,执行顺序肯定是顺 ...
- JS进阶系列之执行上下文
function test(){ console.log(a);//undefined; var a = 1; } test(); 也许你会遇到过上面这样的面试题,你只知道它考的是变量提升,但是具体的 ...
- JavaScript的执行上下文
在JavaScript的运行过程中,经常会遇到一些"奇怪"的行为,不理解为什么JavaScript会这么工作. 这时候可能就需要了解一下JavaScript执行过程中的相关内容了. ...
- Js 作用域与作用域链与执行上下文不得不说的故事 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄
最近在研究Js,发现自己对作用域,作用域链,活动对象这几个概念,理解得不是很清楚,所以拜读了@田小计划大神的博客与其他文章,受益匪浅,写这篇随笔算是自己的读书笔记吧~. 作用域 首先明确一个概念,js ...
- 通俗易懂的来讲讲js的函数执行上下文
0.开场白 在平时编写JavaScript代码时,我们并不会和执行上下文直接接触,但是想要彻底搞懂JavaScript函数的话,执行上下文是我们绕不过去的一个知识点. 1.执行上下文栈 JavaScr ...
随机推荐
- Linux 常用命令解析和Bash Shell使用示例脚本演示
摘要 Linux命令是基于文本格式输入输出的一种程序,依照Unix哲学中强调的程序功能简单,输入宽松,输出严谨,各种程序组合能够具有更强大的功能,而具有这样的灵活性的主要原因是Linux规定程序 ...
- CCLayer在Touch事件(Standard Touch Delegate和Targeted Touch Delegate)
在做练习,触摸故障,看到源代码,以了解下触摸事件. 练习操作:直CClayer子类init在 this->setTouchEnabled(true); 事件处理方法覆盖 virtual bool ...
- RH033读书笔记(10)-Lab 11 Process Control
Lab 11 Process Control Sequence 1: Job Control 1. [student@stationX ~]$ su - 2. Begin some jobs in t ...
- 如何在 Swift 中优雅地处理 JSON
阅读目录 在Swift中使用JSON的问题 开始 基础用法 枚举(Enumeration) 下标(Subscripts) 打印 调试与错误处理 后记 因为Swift对于类型有非常严格的控制,它在处 ...
- C#和C++下数据类型对应表
/C++中的DLL函数原型为//extern "C" __declspec(dllexport) bool 方法名一(const char* 变量名1, unsigned char ...
- ASP.NET2.0自定义控件组件开发 第六章 深入讲解控件的属性
原文:ASP.NET2.0自定义控件组件开发 第六章 深入讲解控件的属性 深入讲解控件的属性持久化(一) 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开 ...
- cocos2d-x 3.1.1 学习笔记[21]cocos2d-x 创建过程
文章出自于 http://blog.csdn.net/zhouyunxuan RootViewController.h #import <UIKit/UIKit.h> @interfac ...
- c++输入密码以星号代替
#include <iostream> #include <string>//注意这里的头文件! #include<conio.h> using namespace ...
- Spring-MVC4 + JPA2 + MySql-5.5 + SLF4J + JBoss WildFly-8.1开发环境的搭建
面试被问Spring4,它的目的是把过去Spring3所有升级项目Spring4.现在将记录在此环境搭建过程. 第一次使用Maven Archetype创建一个项目框架,运行以下命令: mvn arc ...
- Extjs GridPanel 几点说明
1. 在Ext中,表格控件必须包括列定义信息,并指定表格的数据存储器.列信息由columns定义,而数据存储器有store定义. 2. store负责把各种各样的原始数据(JSON对象数组等等)转换成 ...