需要简单解释javascript执行上下文

时间:2016-08-26 08:55:20

标签: javascript ecmascript-5 executioncontext

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

- 代码

var a=10;

function sample(){

   var y = 10;

};

-

  • Javascript引擎启动。
  • 创建全局执行上下文。
  • 创建词法和变量环境对象。
  • 此属性已创建。指向全局对象。
  • 环境对象(词汇和变量)有环境记录和
    外部属性。任何人都可以通过解释的差异来帮助 在这种情况下的环境对象。

  • 创建阶段扫描代码变量被提升为全局 上下文。

  • Environment对象内的环境记录(词汇或 变量??)保留变量定义。
  • 它扫描代码中的函数并找到样本函数。怎么了 什么时候找到一个功能?现在是否设置了[[scope]]属性?将会 如果有人能够对[[范围]]属性做出明确解释

  • ,那就太好了
  • 启动全局执行上下文的执行阶段。

  • 达到功能样本。
  • 创建示例函数上下文。
  • 上述类似步骤发生在创建阶段。
  • 创建执行上下文(
  • 创建词法和变量环境)
  • 词汇环境有环境记录和外部环境 这指向全球词汇环境。
  • 还使用类似属性创建变量环境。
  • 悬挂变量。
  • [[scope]]属性现在发生任何变化??
  • 执行进入执行阶段。等等。

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

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

MIA

1 个答案:

答案 0 :(得分:0)

当你在代码中使用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;
    }