通过上篇,我们已经知道js引擎是什么,那么我们就再了解一点更有意思的东西吧,
一.什么是可执行代码(Execution code)
1.定义(Definitions)
js中合法的代码,可以被js解析器执行的代码(非官方定义)
2.类型(Types of execution code)
在ECMASscript中的代码有三种类型:global, function和eval。
2.1全局代码(Global code)
这种类型的代码是在"程序"级处理的:例如加载外部的js文件或者本地标签内的代码。全局代码不包括任何function体内的代码。
2.2函数代码(Function code)
函数体中的代码(包括自定义和内建的函数)
2.3Eval代码(Eval code)
使用eval函数执行的代码
二.什么是可执行上下文(Execution Context)
1.定义(Definitions)
每次当控制器转到ECMAScript可执行代码的时候,即会进入到一个执行上下文。执行上下文(简称-EC)是ECMA-262标准里的一个抽象概念,用于同可执行代码(executable code)概念进行区分。
2.类型(Types of execution code)--根据可执行代码的类型,Weber也给执行上下文分类
2.1.Global Execution Context 全局执行上下文
代码的默认运行环境,程序代码一旦被载入,最先进入的执行环境.只有一个全局执行上下文.
2.2.Function Execution Context 函数执行上下文
每当调用一个函数,也就是执行函数体中的代码会新建一个函数执行上下文环境.
2.3.Eval Execution Context Eval执行上下文
当使用eval函数执行代码的时候,会新建一个eval执行上下文.
3.组成(compose)
一个执行的上下文可以抽象的理解为object。每一个执行的上下文都有一系列的属性(我们称为上下文状态),他们用来追踪关联代码的执行进度。这个图示就是一个context的结构。
除了这3个所需要的属性(变量对象(variable object),this指针(this value),作用域链(scope chain)),执行上下文根据具体实现还可以具有任意额外属性。
三.什么是执行上下文栈(Execution Context Stack(ECS))
如下图,所有的ECMAScript的程序执行都可以看做是一个执行上下文堆栈[execution context (EC) stack]。堆栈的顶部就是处于激活状态的上下文。
当一段程序开始时,会先进入全局执行上下文环境[global execution context],
这个也是堆栈中最底部的元素。此全局程序会开始初始化,初始化生成必要的对象[objects]和函数[functions].
在此全局上下文执行的过程中,它可能会激活一些方法(当然是已经初始化过的),然后进入他们的上下文环境,然后将新的元素压入堆栈。在这些初始化都结束之后,这个系统会等待一些事件(例如用户的鼠标点击等),会触发一些方法,然后进入一个新的上下文环境。
见图5,有一个函数上下文“EC1″和一个全局上下文“Global EC”,下图展现了从“Global EC”进入和退出“EC1″时栈的变化:
ECMAScript运行时系统就是这样管理代码的执行。
我也是刚刚学习javascript这门语言,如果有什么理解错误的地方,欢迎指出。