JavaScript之执行上下文,函数编译执行的过程

一、执行上下文

执行上下文概念

JS代码在执行前,JS引擎总要做一番准备工作,这份工作其实就是创建对应的执行上下文

当执行一个函数的时候,就会创建一个执行上下文,这个执行上下文内就会收集变量,并且压入执行上下文栈,当函数执行完毕的时候,就会将函数的执行上下文从栈中弹出。

通俗的来说,函数执行上下文就是一个普通对象其中包含了3个属性 :
1、变量对象AO,用来存放变量
2、this
3、作用域链(自己的作用域、父类的作用域、全局作用域)
VO是全局的变量对象

执行上下文类别

执行上下文有且只有三类,全局执行上下文(global context),函数上下文,与eval上下文

二、函数编译执行的过程

1、程序开始执行前

在内存中创建执行环境栈(ECS)(数组),依次保存正在调用函数的数组,当函数执行完就会被弹出去在栈中首先添加的浏览器主函数的调用,创建全局作用域对象 window

2、定义函数时

在window(活动对象)中用函数名创建变量,在window对象外创建函数对象保存函数的内容,如果是对象object,先开辟新空间,初始化操作后,再把地址给函数名通过地址引用函数对象,函数对象用隐藏的scope属性,引用回自己诞生的作用域对象
—万一运行是自己缺东西,找诞生的作用域要。

3、函数执行阶段(分为分析和执行)

创建执行上下文对象(包括,AO活动对象,this,作用域链)

AO对象就是专门用来保存本次函数所需要的局部变量的
—可以理解为函数的作用域对象

3.1 进行执行上下文,还没有执行代码

函数的所用形参,函数自身的申明,变量的声明(此时变量还未赋值)

3.2 执行阶段,再次修改变量对象的属性值

4、函数执行后

ECS弹出当前的执行上下文,此时活动对象OA就会被垃圾回收收掉,回到上一次执行栈

你可能感兴趣的