ECMAScript5学习笔记-第10章

10 可执行代码与可执行环境

10.1 可执行代码类型:全局代码(作为ECMA脚本被解析的源代码),eval(在特定的一次对eval的调用过程中,eval代码作为改程序的#global-code部分),函数代码(作为函数体被解析的源代码,不包括嵌套函数的函数体被解析的源代码)

10.1.1  严格模式下的代码

  以指令序言开始,包含一个使用严格模式的指令序言

  在严格模式下的代码中通过直接调用eval函数时即为严格eval代码

  函数声明,函数表达式或函数赋值访问器处在严格模式下的代码中,或者函数代码以包含严格模式的指令序言开始

  调用内置function构造器时最后一个参数字符串作为函数体处理时以包含严格模式指令序言的指令序言开始

10.2   词法环境

  一个用于定义特定变量和函数标识符在 ECMAScript 代码的词法嵌套结构上关联关系的规范类型

  一个词法环境由一个环境记录项和可能为空的外部外部词法环境构成。

10.2.1  环境记录项

  声明式环境记录项 和  对象式环境记录项

  可以理解为面向对象中的一种简单继承结构

  环境记录项的抽象方法:HasBinding(n);

             CreateMutableBinding(N, D)(D为true时绑定可删除);

             SetMutableBinding(N绑定的名称,V绑定的值, S是否为严格模式);

             GetBindingValue(N,S);

             DeleteBinding(N);

             ImplicitThisValue()当从该环境记录项的绑定中获取一个函数对象并且调用时,该方法返回该函数对象使用的 this 对象的值

  10.2.1.1   声明式环境记录项

       每个声明式环境记录项都与一个包含变量和(或)函数声明的 ECMA 脚本的程序作用域相关联。

      CreateImmutableBinding(N)

      InitializeImmutableBinding(N,V)

  10.2.1.2   对象式环境及录像

      无论是对象自身的,还是继承的属性都会作为绑定,无论该属性的 [[Enumerable]] 特性的值是什么

      即使该绑定对应的属性的 Writable 特性的值为 false。对象式环境记录项没有不可变绑定

  

10.2.2 词法环境的计算

    GetIdentifierReference (lex词法环境, name标识符字符串, strict严格模式标识(严格模式时为"strict"))

    

    

    NewDeclarativeEnvironment(E词法环境)

    NewObjectEnvironment(O对象,E词法环境,可为null)

10.2.3 全局环境

    唯一的词法环境,在任何ECMA脚本执行之前创建

    全局环境的外部环境引用为null

10.3  执行环境

  当前活动的多个执行环境在逻辑上形成一个栈结构。栈最顶层为当前运行的执行环境

  每个执行环境包含:词法环境,变量环境,>this绑定;其中词法环境和变量环境组件始终为词法环境对象。

  执行环境是一个纯粹的标准机制,并不代表任何ECMA脚本实现的工件。在ECMA脚本程序中不可能访问到执行环境。

10.3.1 标识符解析

    使用正在运行的执行环境中的词法环境,通过一个标识符获得其对应的绑定的过程。

    解释执行一个标识符的到的结果必定是引用类型的对象,且其引用名属性的值与identifier字符串相等。

10.4  建立执行环境

  每次解释执行全局代码或使用eval函数输入的代码或者调用脚本代码定义的函数 甚至是自身递归调用都会创建并进入一个新的执行环境。每一次return都会退出一个执行环境,就连抛出异常也会退出一个或多个执行环境。

  控制流进入一个执行环境时会设置该执行环境的this绑定。

  10.4.1.1 初始化全局执行环境:变量环境,词法环境=>为全局环境 this->全局对象

10.5  定义绑定初始化

  http://yanhaijing.com/es5/#151

10.6 Arguments对象(http://yanhaijing.com/es5/#152)

   Arguments 对象通过调用抽象方法 CreateArgumentsObject 创建,调用时将以下参数传入:func, names, args, env, strict。

没彻底搞懂内部实现机制,待整个啃完第一遍之后再回来重新研究==

时间: 2024-12-17 09:21:56

ECMAScript5学习笔记-第10章的相关文章

<<Python基础教程>>学习笔记 | 第10章 | 充电时刻

第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简单的模块 #hello.py print ("Hello,World!") >>> import hello Traceback (most recent call last): File "<pyshell#56>", line 1, i

Python学习笔记__12.10章 XML

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 XML虽然比JSON复杂,在Web中应用也不如以前多了,不过仍有很多地方在用,所以,有必要了解如何操作XML. 1.DOM vs SAX 操作XML有两种方法:DOM和SAX.DOM会把整个XML读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点.SAX是流模式,边读边解析,占用内存小,解析快,缺点是我们需要自己处理事件. 正常情况下,优先考虑SAX,因为DOM实在太占内存. 2.使用SAX解析XML 在Python

算法导论学习笔记——第10章 基本数据结构

栈 1 Stack-EMPTY(S) 2 if top[S]=0 3 then return TRUE 4 else return FALSE 5 6 PUSH(S,x) 7 top[S]←top[S]+1 8 S[top[S]]←x 9 10 POP(S) 11 if STACK-EMPTY(S) 12 then error "underflow" 13 else top[S]←top[S]-1 14 return S[top[S]+1] 队列 1 ENQUEUE(Q,x) 2 Q[

【算法导论】学习笔记——第10章 基本数据结构

基本数据结构主要包括:栈.队列.链表和有根树. 10.1 栈和队列栈和队列都是动态集合,且在其上进行DELETE操作所移除的元素时预先设定的.在栈中,被删除的是最近插入的元素:栈实现的是一种后进先出(LIFO)策略.队列实现的是一种先进先出(FIFO)策略.栈栈上的INSERT操作称为压入(PUSH),无参数的DELETE操作称为弹出(POP).栈操作的代码非常简单: 1 typedef struct { 2 int A[MAXN]; 3 int top; 4 } Stack_st; 5 6 i

ECMAScript5学习笔记--第十三章 函数定义

语法: FunctionDeclaration : function Identifier ( FormalParameterListopt ) { FunctionBody } FunctionExpression : function Identifieropt ( FormalParameterListopt ) { FunctionBody } FormalParameterList : Identifier FormalParameterList , Identifier Functi

Oracle涂抹oracle学习笔记第10章Data Guard说,我就是备份

DG 是备份恢复工具,但是更加严格的意义它是灾难恢复 Data Guard是一个集合,由一个Primary数据库及一个或者多个Standby数据库组成,分两类逻辑Standby和物理Standby 10.2.1物理Standb创建前的准备工作 不管是物理Standb还是逻辑Standby,其创建都是依赖Primary数据库,由此准备工作中最重要的一部分就是对Primary数据库进行配置 10.2.1.1 启用Force Logging (强制记录模式) SQL> alter database f

ECMAScript5学习笔记-第11章

11.表达式 11.1  主值表达式  语法:PrimaryExpression : this:执行为当前执行环境的ThisBinding Identifier :执行遵循 标识符解析 的标识符查找.标识符执行的结果总是一个 Reference 类型的值.  Literal:  ArrayLiteral:一个零个或者多个表达式的序列,其中每一个表示一个数组元素,并且用方括号括起来 当元素列表中的一个逗号没有被 AssignmentExpression 优先处理(如,一个逗号在另一个逗号之前.)的

【算法导论】学习笔记——第6章 堆排序

堆这个数据结构应用非常广泛,数字图像处理的算法里也见过.似乎记得以前老师上课说需要用树结构实现堆排序,看了一下算法导论才明白其精髓.堆虽然是一棵树,但显然没必要非得用树结构实现堆排序.堆排序的性质很好,算法时间复杂度为O(nlgn). 1. 堆排序的简要说明.二叉堆可以分为两种形式:最大堆和最小堆.在最大堆中,最大堆性质是指除了根以外的所有结点i都要满足: A[PARENT(i)] >= A[i]:在最小堆中,最小堆性质是指除了根以外的所有结点i都要满足: A[PARENT(i)] <= A[

APUE学习笔记:第九章 进程关系

9.1 引言 本章将更详尽地说明进程组以及POSIX.1引入的会话的概念.还将介绍登陆shell(登录时所调用的)和所有从登陆shell启动的进程之间的关系. 9.1 终端登陆 系统管理员创建通常名为/etc/ttys的文件,其中每个终端设备都有一行,每一行说明设备名传递给getty程序的参数.当系统自举时,内核创建进程ID为1的进程,依旧是init进程.init进程使系统进入多用户状态.init进程读文件/etc/ttys,对每一个允许登陆的终端设备,init调用一次fork,所生成的子进程则