美文网首页
【进阶1-1】理解JavaScript的执行上下文和执行栈

【进阶1-1】理解JavaScript的执行上下文和执行栈

作者: IgreatDD | 来源:发表于2019-03-07 15:51 被阅读0次

    执行上下文

    执行上下文是当前JavaScript被解析和运行时所在环境的抽象概念。

    执行上下文的类型

    • 全局执行上下文:只有一个,浏览器的全局对象就是windows对象,this指向这个对象。
    • 函数执行上下文:只有在函数被调用的时候才会被创建。每次调用函数都会创建一个新的函数执行上下文。
    • eval执行上下文:运行在eval函数中的代码。

    执行栈

    执行栈,也叫任务栈。具有LIFO(后进先出)的结构。用于存储代码运行期间创建的所有执行上下文。

    1. 首次运行代码时,会创建一个全局的执行上下文,并push到执行栈中。每当发生函数调用,都会创建一个函数执行上下文,并push到当前的执行栈中。
    2. 根据任务栈LIFO的结构,当栈顶函数调用完毕后,会从执行栈的栈顶pop出这个函数的函数执行上下文。上下文控制权会移交给下一个执行上下文。
    function first() {  
      console.log('Inside first function');  
      second();  
      console.log('Again inside first function');  
    }
    
    function second() {  
      console.log('Inside second function');  
    }
    
    first();  
    console.log('Inside Global Execution Context');
    // Inside first function
    // Inside second function
    // Again inside first function
    // Inside Global Execution Context
    
    JavaScript执行上下文流程图.png

    执行上下文的创建

    执行上下文分为两个阶段进行创建:1.创建阶段2.执行阶段

    创建阶段

    1. 确定 this 的值,也就是 this binding
    2. LexicalEnvironment(词法环境) 组件被创建。
    3. VariableEnvironment(变量环境) 组件被创建。

    相关文章

      网友评论

          本文标题:【进阶1-1】理解JavaScript的执行上下文和执行栈

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