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堆栈中压入了新的元素。必须要注意的是具体函数代码不包含它的内部函数代码段。例如,我们调用一个递归调用自身的函数:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统在虚拟机中迁移的技术难点

linux系统在虚拟机迁移中的技术难点通常我们期望虚拟机的迁移能够全部自动化或者部分自动化完成&#xff0c;但实际上Linux系统在P2V&#xff08;Physical to virtual 物理到虚拟&#xff09;和V2V&#xff08;virtual to virtual&#xff09;的迁移中可能遇到一些困难。1.磁盘…

Altium Designer 09简易教程(一)

【写的不好请谅解】 1、首先需要先准备好软件&#xff0c;这个大家就直接去网上找一下&#xff0c;安装也不难&#xff0c;如果有需要也可以给我留言哈嘻嘻嘻&#xff1b; 2、打开ad09&#xff1b; 3、大家会发现整个界面都是英语&#xff0c;可能看起来有点累吧&#xff0c;就…

莒南机器人_莒南42项重点建设项目公布!一定有你关注的

10日&#xff0c;县发改局公布莒南县2020年重点建设项目表&#xff01;涉及工业、服务业、基础设施、现代农业等行业&#xff0c;共42项。详↓工业1、山东钢铁集团永锋临港有限公司临港先进优特钢产业基地一期项目投资方&#xff1a;山东钢铁集团永锋临港有限公司建设地点&…

配置Mysql实现主从复制与读写分离

环境说明 主从复制使用mysql自带的master与slave机制&#xff1b;读写分离使用mysql-proxy实现&#xff01; 有服务器三台&#xff1a;s1,s2,s3。 s1为web服务器&#xff0c;装有httpd&#xff0c;php&#xff0c;mysql&#xff0c;mysql-proxy。 s2为主数据库服务器&#xff0…

js两个小技巧【看到了就记录一下】

1、不声明第三个变量实现交换 var a1,b2; a[b,ba][0];//执行完这句代码之后 a的值为2 b的值为1了 2、&&和||的用法 &#xff08;学会了立马感觉高大尚了吧&#xff09; var day(new Date).getDay()0; //传统if语句 if (day) {alert(Today is Sunday!); }; //运用逻辑…

c语言题目集合

转自&#xff1a;http://blog.csdn.NET/oqqhutu12345678/article/details/69524383 1. 用预处理指令#define 声明一个常数&#xff0c;用以表明1年中有多少秒&#xff08;忽略闰年问题&#xff09; #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2. 写一个“标准”宏M…

arduino 土壤温湿度传感器_嫌arduino太贵?太大?试试ATTINY85!DIY温湿度计入门级教程...

ATTINY85做主控&#xff0c;OLED显示的温湿度计。简介&#xff1a;通过Arduino开发环境&#xff0c;对ATTINY85进行编程&#xff0c;利用DH11温湿度传感器&#xff0c;在SSD1306(128*64)OLED显示屏上显示温度和湿度。材料&#xff1a;ATTINY85DHT11SSD1306 (12864 OLED)电池盒纸…

认识事件冒泡和事件捕获

一.事件冒泡就是多个元素同时响应了同一个事件&#xff0c;前提是这些元素都绑定了这一个事件。这只是我的定义&#xff0c;感觉好理解些。 称它为冒泡&#xff0c;是因为事件会按照DOM元素的层次结构依次执行&#xff0c;就像水泡一样不断浮向顶端。所以称之为事件冒泡。 这个…

BSD配置SSH服务

转载&#xff1a;因为是在vmware上装的FreeBSD&#xff0c;用vmware console把玩系统有点麻烦&#xff0c;就是想起可以开启FreeBSD系统的SSH服务器&#xff0c;再用ssh客户端软件(putty)来更省事一点。以下是配置过程&#xff0c;备忘1&#xff0e;开机启动ssh服务,编辑/etc/r…

计算abc=a!+b!+c!

根据题目&#xff0c;即求abca!b!c! 下面我们设计算法&#xff1a; 设三位数为n,取出每一位数分别放在a、b、c中 通过定义形参&#xff0c;求每位数的阶乘&#xff0c;通过函数返回值返回 主函数中&#xff0c;调用返回值&#xff0c;每一位的阶乘相加与该三位数比较&#xff0…

docker选择安装位置_自定义WSL的安装位置,别再装到C盘啦

本文使用 Zhihu On VSCode 创作并发布为了用docker,今天才决定更新到win10 2004打算另外装一个WSL2的发行版折腾docker和GPU&#xff0c;发现之前装WSL到非系统盘的教程找不到了。现在网上也没找到有这方面的东西&#xff0c;干脆自己写一个留作记录吧~WSL(Windows Subsystem f…

[讨论帖] 程序员如何赚外快?

昨天的一篇文章一个程序员如何快速赚到一百万&#xff1f;引起了大家的热门讨论&#xff0c;现在另开一个贴&#xff0c;讨论一下如何赚钱。 -------------------------- 挣外快需要的是大量的业余时间和强大的意志&#xff0c;如果你是个每天工作十几个小时天天累得像狗一样的…

求两个数的最大公约数和最小公倍数

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 [plain] view plaincopy #include <stdio.h> int main() { int a, b, num1, num2, tmp; printf("Input a & b:"); scanf("%d %d",&num…

XP系统中没有Internet信息服务windows组件解决办法

1. 检查本机是否有iis2.dll&#xff08;或者iis.dll&#xff09;和iis2.inf&#xff08;或者iis.inf&#xff09;文件 iis2.dll&#xff08;或者iis.dll&#xff09;的存放路径为&#xff1a;c:\Windows\system32\setup\iis2.dll&#xff1b; iis2.inf&#xff08;或者ii…

24安装失败 spss win10_教你win10系统显卡驱动安装失败的解决方法「系统天地」

我们日常在对电脑的使用过程中&#xff0c;经常都会遇到这样或那样的问题。比如说win10系统显卡驱动安装失败该怎么办呢&#xff1f;别着急&#xff0c;还有小编在呢&#xff1f;接下来小编就来告诉大家win10电脑系统显卡驱动安装失败怎么解决。详细教你win10系统显卡驱动安装失…

自定义字符串函数:strlen,strcat,strcpy,strcmp

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 计算字符串长度函数strlen&#xff1a; int mystrlen(char *s) {int count 0;char *p s;if (!p){return count;}while (*p ! \0){count;p;}return count; }1234567891011121314151617181912345678…

Linux系统日志及日志分析

Linux系统拥有非常灵活和强大的日志功能&#xff0c;可以保存几乎所有的操作记录&#xff0c;并可以从中检索出我们需要的信息。大部分Linux发行版默认的日志守护进程为 syslog&#xff0c;位于 /etc/syslog 或 /etc/syslogd&#xff0c;默认配置文件为 /etc/syslog.conf&#…

算法题系列

如果字符串str3能够由str1和str2中的字符按顺序交替形成&#xff0c;那么称str3为str1和str2的交替字符串。 例如str1"abc"&#xff0c;str2"def"&#xff0c;那么"adbecf", "abcdef", "abdecf", "abcdef", "…

学会拒绝别人的6个技巧_多少人败在不懂拒绝上!牢记10个高情商拒绝技巧,人生越来越顺...

人际交往中&#xff0c;往往需要拒绝别人的请求&#xff0c;否定别人的意见&#xff0c;这并非易事&#xff0c;需要极高的情商&#xff0c;做到既能成功拒绝&#xff0c;又不得罪他人。否则&#xff0c;不懂拒绝的话&#xff0c;就会给自己带来许多麻烦&#xff0c;也会给别人…

ad09教程

【写的不好请谅解】 1、首先需要先准备好软件&#xff0c;这个大家就直接去网上找一下&#xff0c;安装也不难&#xff0c;如果有需要也可以给我留言哈嘻嘻嘻&#xff1b; 2、打开ad09&#xff1b; 3、大家会发现整个界面都是英语&#xff0c;可能看起来有点累吧&#xff0c;就…