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
    

      

  • 相关阅读:
    JS正则表达式
    JS验证电话号是否合法
    特性Attribute 的使用
    三层架构(面向对象思想)
    oracle 游标的使用
    oracle中的net manager 无法配置
    .net学习网站汇总
    每天进步一点点之后缀表达式求值
    每天进步一点点之中缀表达式转后缀表达式
    下载Android代码
  • 原文地址:https://www.cnblogs.com/qqfontofweb/p/11932826.html
Copyright © 2011-2022 走看看