美文网首页
再学JS--执行上下文

再学JS--执行上下文

作者: Territory_Cheng | 来源:发表于2020-04-17 11:07 被阅读0次

结合一个例子来总结下执行上下文的知识点:

var scope = 'global scope'
function checkScope(){
    var scope = 'local scope'
    function f() {
        return scope
    }
    return f
}
checkScope()

具体执行过程

1、执行全局代码,创建全局执行上下文,全局上下文被压入执行上下文栈

ECStack = [
    globalContext
]

2、全局上下文初始化

globalContext = {
    VO: [global, scope, checkScope],
    Scope: [globalContext.VO],
    this: globalContext.VO
}

​ 初始化的同时,checkScope函数被创建,保存作用域链到函数的内部属性[[scope]]

checkScope.[[scope]] = [
    globalContext.VO
]

3、执行checkScope函数,创建checkScope函数执行上下文,checkScope函数执行上下文被压入执行上下文栈

ECStack = [
    checkScopeContext,
    globalContext
]

4、checkScope函数执行上下文初始化

  1. 复制函数[[scope]]属性创建作用域链
  2. 用arguments创建活动对象
  3. 初始化活动对象,即加入形参、函数声明、变量声明
  4. 将活动对象压入checkScope作用域顶端

同时f函数被创建,保存作用域链到f函数的内部属性[[scope]]

checkScopeContext = {
    AO: {
        arguments: {
            length: 0
        },
        scope: undefined,
        f: reference to function f() {}
    },
    Scope: [AO, globalContext.VO],
    this: undefined
}

5、执行f函数,创建f函数执行上下文,f函数执行上下文被压入执行上下文栈

ECStack = [
    fContext,
    checkScopeContext,
    globalContext
]

6、f函数执行上下文初始化

  1. 复制函数[[scope]]属性创建作用域链
  2. 用arguments创建活动对象
  3. 初始化活动对象,即加入形参、函数声明、变量声明
  4. 将活动对象压入f作用域顶端
fContext = {
    AO: {
        arguments: {
            length: 0
        },
    },
    Scope: [AO, checkScopeContext.AO, globalContext.VO],
    this: undefined
}

7、f函数执行,沿着作用域链查找scope值,返回scope值

8、f函数执行完毕,f函数上下文从执行上下文栈弹出

ECStack = [
    checkScopeContext,
    globalContext
]

9、checkScope函数执行完毕,checkScope函数上下文从执行上下文栈弹出

ECStack = [
    globalContext
]

相关文章

  • 再学JS--执行上下文

    结合一个例子来总结下执行上下文的知识点: 具体执行过程 1、执行全局代码,创建全局执行上下文,全局上下文被压入执行...

  • 再学JS--作用域与执行上下文栈

    作用域 作用域的概念是指程序源代码中定义变量的区域 作用域是规定了如何查找变量,也就是确定当前执行代码对变量的访问...

  • 再学JS--事件节流

    节流 节流:如果你持续触发事件,每隔一段时间,只执行一次事件 关于节流的实现,有两种主流的实现方式,一种是使用时间...

  • 再学JS--闭包

    MDN对闭包的定义: 闭包是指那些能够访问自由变量的函数 那什么是自由变量? 自由变量是指在函数中使用的,但既不是...

  • 再学js--变量对象

    当JavaScript代码执行一段可执行的代码时,会创建对应的执行上下文,对于每个执行上下文的创建阶段,都有三个重...

  • 再学 this

    执行上下文主要分为三种:全局执行上下文、函数执行上下文、eval执行上下文。而this和执行上下文是相互绑定的,所...

  • 对js执行上下文的理解

    执行上下文 执行上下文有三种: 全局执行上下文在执行全局代码的时候会创建全局上下文 函数执行上下文在执行函数代码的...

  • 深入浅出执行上下文、词法环境、变量环境

    执行上下文的概念 执行上下文:javascript 代码解析和执行时所在的环境。 执行上下文的类型 执行上下文分为...

  • js深度剖析 : 执行环境和作用域链

    执行上下文 execution context 又称执行上下文或者执行环境. 执行上下文是JavaScript中一...

  • js 代码的执行

    执行上下文 EC(Execution Context):代码自己执行所在的环境 全局执行上下文 函数执行上下文 ...

网友评论

      本文标题:再学JS--执行上下文

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