【问题标题】:Need a simple explanation of javascript execution context需要简单解释一下javascript执行上下文
【发布时间】:2017-01-02 21:19:55
【问题描述】:

我只是想弄清楚执行上下文工作流程的简单解释。

--代码

var a=10;

function sample(){

   var y = 10;

};

--

  • Javascript 引擎启动。
  • 全局执行上下文已创建。
  • 创建了词法和变量环境对象。
  • 此属性已创建。指向全局对象。
  • 环境对象(词法和变量)具有环境记录和
    外属性。谁能帮忙解释一下
    在此上下文中的环境对象。

  • 创建阶段扫描代码变量被提升为全局 语境。

  • Environment 对象内的环境记录(词法或 variable ??) 保留变量定义。
  • 它扫描函数代码并找到示例函数。发生什么了 当它找到一个功能?现在是否设置了 [[scope]] 属性?将是 如果有人可以清楚地解释 [[scope]] 属性,那就太好了

  • 全局执行上下文的执行阶段已启动。

  • 到达函数示例。
  • 示例函数上下文已创建。
  • 与上述类似的步骤发生在创建阶段。
  • 创建了一个执行上下文(
  • 创建了词法和变量环境)
  • 词法环境有环境记录和外部环境
    它指向全局词汇环境。
  • 还使用类似的属性创建了可变环境。
  • 变量被提升。
  • 现在 [[scope]] 属性发生任何变化??
  • 执行进入执行阶段。等等。

请注意:我有点理解当可能存在函数表达式或 try catch 子句等时解释和行为会发生变化。已阅读变量环境在这种情况下发挥作用。我只是在寻找上述功能的工作流程。甚至函数的参数也会创建一个参数属性。这也可以忽略。只是基于上面的示例代码对词法变量环境和 [[scope]] 属性的一个非常简单的解释。还有一个这个属性。在这种情况下,它只是全局对象 - 我相信两种上下文的窗口。让我们也忽略它以保持简单:)。在理解这可能是我将为此创建一个单独的问题:)。

希望有人能帮助我理解这个基本概念。寻找基于 ES5 的解释。提前感谢您的帮助。

米娅

【问题讨论】:

    标签: javascript ecmascript-5 executioncontext


    【解决方案1】:

    当您在代码中使用 var 时,Javascript 会进行变量提升。

    var a=10;
    
    function sample(){
    
       var y = 10;
    
    };
    

    因此编译器会将您上面的代码转换为以下代码。变量将被提升到其范围的顶部。

    var a=undefined;
    a=10;
    
    function sample(){
      var y=undefined; // this is because var is function scoped in javascript
      y=10;
    };
    

    还说你有以下代码。

    var a=10;
    
    if(true){
      var b=20;
    }
    

    上面的代码会被编译器翻译成-

    var a=undefined;
    var b=undefined;
    
        a=10;
        if(true){
           b=20;
        }
    

    【讨论】:

    • 感谢@Harkirat Saluja 的解释。我理解吊装。我实际上正在寻找一些内部结构,例如 [[scope]] 属性和词汇环境及其关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2011-12-09
    • 2016-06-19
    • 1970-01-01
    相关资源
    最近更新 更多