JS 代码执行的一些概念

ECStack Excution Context Stack

执行上下文环境栈

代码执行都需要在ECStack中。栈内存,就是用来执行代码的。


EC Excution Context 执行上下文

每个域都有自己的EC。

EC创建后会被压进栈里面执行。执行完以后,如果没被其它的内容占用,那么就会出栈。如果被其它的内容占用,那么会被压入栈底,等待执行。


GO Global Object 全局对象

浏览器中GO会赋值给window。Math是全局对象。


VO Varibale Object 变量对象

全局下的变量,就是VO。


AO Activation Object 活动变量对象

函数的中变量,就是AO,可以看作是VO的分支。


变量赋值的三个步骤

1.创建变量,declair

2.创建值

  1).基本值直接在栈中创建并存储。

  2).引用值,引用值复杂的结构,所以特殊

需要开辟一个单独的空间储存对象中的键值对,这个空间是堆内存。每个堆内存空间都有一个可供访问的16进制地址。变量赋值时就将这个地址赋值给变量。所以,引用类型的变量存储的只是对象的堆内存地址。

3.建立变量和值的关联,赋值,defined。


创建函数和执行函数

函数创建,函数创建和一般变量创建的步骤是一样的。

函数也是对象,也是引用类型值,所以也会开辟新的堆内存空间。

函数名储存的是对应堆内存地址

所以也会创建函数名变量,创建堆内存空间,关联函数名和堆内存地址。

函数堆内存中会储存两类内容

1.函数代码字符串

2.函数对象键值对

length:形参个数

name:函数名

prototype原型

……

函数执行 fn()

函数执行会创建新的EC压进ECStack中之中。

函数执行的三个步骤:

1.初始化实参集合

  arguments = {0:第一个实参,1:第二个实参,……}

2.创建形参并赋值

形参1= ……

形参2= ……

3.执行代码


形参和实参在非严格模式下会建立映射关系,某一个改变会影响另一个。

严格模式下则没有映射关系,是相互独立的。

ES6中的箭头函数是没有实参集合arguments的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容