JavaScript中的“执行上下文”到底是什么?

我的头衔几乎概括了这一切。

谁能启发我...

“ JavaScript中的“执行上下文”是什么?”

以及它与“ this”,吊装,原型链,作用域和垃圾回收有何关系?


慕沐林林
浏览 346回答 3
3回答

慕村225694

您要问的是几个密切相关的不同概念。我将尝试简要地解决每个问题。执行上下文是语言规范中的一个概念,用外行人的术语来说,大致等同于函数执行的“环境”。也就是说,变量作用域(以及作用域链,外部作用域的闭包中的变量),函数参数和this对象的值。该调用堆栈是执行上下文的集合。另请参阅此答案和本文。范围从字面上说是:可以访问变量的范围。简单地说:var x;function a() {    var y;}x可以从任何地方访问。何时a调用,x将在外部范围内。(存储在范围链中。)相反,y只能由代码访问,a()因为它限于a的范围。这是什么var关键词呢:限制在局部范围的变量。如果我们省略var,y将最终出现在全局范围内,通常被认为是一件坏事。将吊装更多地视为编译时的事情。在JavaScript中,函数声明 “悬挂”在其作用域的顶部。换句话说,它们是在分析任何其他代码之前进行解析和评估的。(这与内联求值的函数表达式相反。)请考虑以下几点:a();b();function a() { }var b = function() { }对to的调用a()将成功,因为其声明已被置于最高位置;a在程序开始执行之前被自动分配给。到的调用b()将失败,TypeError因为b直到第4行才会定义。

jeck猫

您已经问了很多概念,但让我们一个接一个地了解它们。运行代码的环境是Execution context。 它是在执行代码时创建的。Execution Context (Global),由JS Engine创建,其中包含3个重要的内容:全局对象- window特殊对象 this参考外部环境让我们看一个简单的例子来理解Global Execution Context:var a = "Hello World";function b(){}当JS Engine运行以上代码时,它将创建以下执行上下文(如图所示): 全局执行上下文现在,让我们看看JS Engine是如何创建的Execution Context(然后我们将挖掘并了解提升):考虑以下情况:b();console.log(a);var a = "Hello World!";function b(){    console.log("Called b!");}我可以调用该函数,b()即使它是在以后声明的。这意味着JS Engine在执行我的代码之前正在做一些事情,让我们看看:JS Engine在执行任何代码时执行以下两个步骤:创作阶段:JS Engine解析-在您的代码中运行identifies variables & functions并由代码创建(将在执行阶段使用)设置变量和函数的存储空间- “提升”吊装 -在执行代码之前,JS引擎会设置代码内部使用的Var和Func的存储空间。这些变量和函数构成了要执行的任何函数的执行上下文。JS中的所有变量最初都设置为undefined。执行阶段:非常简单易懂,当代码逐行执行(由JS解释器执行)时,它可以访问在执行上下文中定义的变量变量分配在此阶段完成只要存在函数调用,就会创建一个新的执行上下文。执行上下文堆栈: 调用函数时会发生什么:function b(){}function a(){    b();}a();现在首先Global Execution Context要创建(如上所述)然后执行开始,口译员遇到call to functiona(),并且here a new execution context is created pushed on top ECStack因此,无论何时调用函数,都会创建一个新的EC并将其放置在EC Stack的顶部。所以现在EC for a()是CREATEDinterpreeter将执行里面的代码a()行由行然后口译员遇到call to function b(),这将创建另一个EC推到顶部或EC堆栈的对象当b()完成将弹出的出栈,然后a()将完成与一路下跌至Global EC
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript