美文网首页
2019-03-13 执行上下文、函数堆栈

2019-03-13 执行上下文、函数堆栈

作者: 忙于未来的民工 | 来源:发表于2019-04-12 10:26 被阅读0次

    概念

    EC:函数执行环境(执行上下文)

    ECS:执行环境栈

    VO:变量对象

    AO:活动对象

    scope chain:作用域链

    EC

    当js引擎执行js代码时,就会进入到一个执行环境

    js代码类型:

    全局代码:这种类型的代码在程序启动时就会执行的代码。例如加载外部js文件,或者本地<script></script>标签内的代码,全局代码不包含函数体内的代码。

    函数代码:任何一个函数内部的代码,不包括函数内部的函数的代码。其实每次进入一个函数内部都会新建一个执行上下文

    eval代码eval方法接收的代码片段

    ec建立分为两个阶段:

    进入执行上下文和执行阶段

    进入执行上下文:函数已经被调用,但是未执行函数中的代码

    执行阶段:变量赋值,函数引用,执行代码

    可以将执行上下文(EC)看成一个对象

    EC={

    VO:{/* 函数中的arguments对象, 参数, 内部的变量以及函数声明 */},

    this:{},

    Scope:{/* VO以及所有父执行上下文中的VO */}

    }

    ECS

    ecs是执行环境栈。执行环境栈是一个栈结构,里面存储的是执行上下文,当程序启动时,进入全局上下文并将全局上下文加入到执行环境栈(ECS),当调用函数时,会新建一个执行上下文(a),然后将这个上下文压入执行环境栈的顶部。如果在函数内部又调用一个函数,那么会继续新建一个执行上下文(b),然后将这个上下文压入执行环境栈的顶部(如果再调用其他的函数,继续重复上一个动作)。

    当执行上下文b执行结束后,执行环境栈会将将b从栈中弹出,接着执行a。当栈中的上下文被执行完毕,会重新回到全局上下文

    VO(变量对象)/AO(活动对象)

    ao其实就是激活的vo

    VO: {// 上下文中的数据 (变量声明(var), 函数声明(FD), 函数形参(function arguments))}

    1:进入执行上下文时,VO的初始化过程

    函数的形参:变量对象的属性,形参的名字为key,值为val,若没有传递参数,那么值为undefined

    函数的声明:其属性的名与值都是函数对象创建出来的,如果变量对象已经同名的属性,那么替换它的值

    变量声明:和形参一样,变量名字为key,值为undefined,当变量名字和函数名或者函数的参数名相同时,不会影响已经存在的属性。

    注意:

    function s(a) {

    console.log(a);  // 1

      var a;

      a= 4;

      console.log(a)  // 4

    }

    s(1);

    该过程有先后顺序

    2:执行代码阶段,VO的一些属性undefined值将会确定

    活动对象:活动对象就是被激活的对象,其实就是每次进入一个执行上下文,那么当前上下文的变量对象就是活动对象。

    相关文章

      网友评论

          本文标题:2019-03-13 执行上下文、函数堆栈

          本文链接:https://www.haomeiwen.com/subject/fyjzpqtx.html