zoukankan      html  css  js  c++  java
  • 执行上下文和执行上下文栈的理解

    JavaScript运行的时候总是会‘一段一段’地执行代码比如

    var foo = function () {
    
        console.log('foo1');
    
    }
    
    foo();  // foo1
    
    var foo = function () {
    
        console.log('foo2');
    
    }
    
    foo(); // foo2
    

      

    function foo() {
    
        console.log('foo1');
    
    }
    
    foo();  // foo2
    
    function foo() {
    
        console.log('foo2');
    
    }
    
    foo(); // foo2
    

      

    当执行一段代码的时候,会进行一个“准备工作”,比如第一个例子中的变量提升,和第二个例子中的函数提升。

    执行一段代码的时候回进行一个准备工作,比如进行变量,函数提升,这个时候就叫做执行上下文(官方说法),本人理解的是执行一段代码会进行变量和函数的分析让代码符合es标准,

    执行上下文栈呢?

    JavaScript 引擎创建了执行上下文栈(Execution context stack,ECS)来管理执行上下文

    栈是一种数据结构,先进后出,所以,每次最先执行的代码最后出来;

    如下

    function fun3() {
        console.log('fun3')
    }
    
    function fun2() {
        fun3();
    }
    
    function fun1() {
        fun2();
    }
    
    fun1();
    

      

    // 伪代码
    
    // fun1()
    ECStack.push(<fun1> functionContext);
    
    // fun1中竟然调用了fun2,还要创建fun2的执行上下文
    ECStack.push(<fun2> functionContext);
    
    // 擦,fun2还调用了fun3!
    ECStack.push(<fun3> functionContext);
    
    // fun3执行完毕
    ECStack.pop();
    
    // fun2执行完毕
    ECStack.pop();
    
    // fun1执行完毕
    ECStack.pop();
    
    // javascript接着执行下面的代码,但是ECStack底层永远有个globalContext
    

      

  • 相关阅读:
    Visual C++ 2010 SP1 x86&x64
    MVC拦截
    自定义HTTP消息拦截
    转mysql半主从同步
    mysql主从搭建之诡异事件
    snapshot相关
    分布式系统唯一ID生成方案汇总
    mysql监控利器mysqlmtop部署安装
    mysql日常运维
    MySQL索引背后的数据结构及算法原理
  • 原文地址:https://www.cnblogs.com/qqfontofweb/p/11932826.html
Copyright © 2011-2022 走看看