执行上下文概念 2.执行上下文类型 全局执行上下文 函数执行上下文 eval函数 3....执行上下文的内容 变量对象 活动对象 作用域链 调用者信息 4.执行上下文的生命周期 创建阶段 执行阶段 销毁阶段 执行上下文概念 执行上下文为我们的可执行代码块提供了执行前的必要准备工作,如变量对象的定义...执行上下文的类型 JS中有三种执行上下文类型: 全局执行上下文:默认的最基础的执行上下文,一个程序只会存在一个全局上下文,它在整个JS脚本的生命周期中都会存在于执行堆栈的最底部,不会被栈弹出销毁。...函数执行上下文:执行在eval函数内部的代码也会有它属于自己的执行上下文。...3.销毁阶段 一般来讲当函数执行完成后,当前执行上下文会被弹出执行上下文栈并且销毁,控制权被重新交给执行栈上一层的执行上下文。
第一部分:执行上下文 1.javascript在执行一个代码段之前,都会进行这些“准备工作”来生成执行上下文 做了哪些准备工作 ? image.png ?...image.png 解析:函数执行时, a)先填充函数的参数,得到 x且得到值10,y:undefined;z:undefined, b)函数声明,function x(){},且覆盖了原来的x:10,...第二部分:执行上下文栈 执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境。 当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文 环境。...处于活动状态的执行上下文环境只有一个。 其实这是一个压栈出栈的过程——执行上下文栈。如下图: ? 看代码演示 ? ?...console.log(a);//函数,函数和变量声明提前,此结果说明函数声明比变量更先; var a =3; function a(){ console.log(a)//不执行
执行上下文的概念执行上下文是JavaScript中用于管理和执行代码的环境。它是一个抽象的概念,用于描述代码在运行时的状态和相关信息。...每当JavaScript代码执行时,都会创建一个执行上下文,并按照特定的规则进行管理和执行。执行上下文可以分为三种类型:全局执行上下文:在代码执行之前,全局执行上下文是第一个被创建的执行上下文。...函数执行上下文:当一个函数被调用时,将创建一个函数执行上下文。每个函数都有自己的执行上下文,用于管理函数内部的变量、函数声明和作用域。...Eval函数执行上下文:使用eval函数执行的代码会创建一个特殊的执行上下文,称为Eval函数执行上下文。它的作用类似于函数执行上下文,但具有一些特殊规则。...作用域链的顶端是当前执行上下文的变量对象,底端是全局执行上下文的变量对象。
理解执行上下文 执行上下文(Execution Context): 函数执行前进行的准备工作(也称执行上下文环境) 运行JavaScript代码时,当代码执行进入一个环境时,就会为该环境创建一个执行上下文...JavaScript中执行环境 全局环境 函数环境 eval函数环境 (已不推荐使用) 那么与之对应的执行上下文类型同样有3种: 执行上下文的类型 全局执行上下文 函数执行上下文 eval函数执行上下文...程序执行进入一个执行环境时,它的执行上下文就会被创建,并被推入执行栈中(入栈);程序执行完成时,它的执行上下文就会被销毁,并从栈顶被推出(出栈),控制权交由下一个执行上下文。...出栈入栈图解 执行上下文的生命周期 执行上下文的生命周期有两个阶段: 创建阶段(进入执行上下文) 执行阶段(代码执行) 创建阶段:函数被调用时,进入函数环境,为其创建一个执行上下文,此时进入创建阶段。...,其它需要排队 全局上下文只有一个处于栈底,页面关闭时出栈 函数执行上下文可存在多个,但应避免递归时堆栈溢出 函数调用时就会创建新的上下文,即使调用自身,也会创建不同的执行上下文 参考文档 执行上下文详细图解
前言 Execution Context(执行上下文)是 ECMA-262 标准中定义的一个抽象概念,用于同 Executable Code(可执行代码)进行区分。...Executable Code 合法的,可以被解释器解析执行的代码。...它决定了 Executable Code 执行的过程中可以访问的数据。...functionContext,globalContext] Eval Code 与 Eval Execution Context Eval Code 引入了一个新的概念 —— Calling Context(调用上下文...创建 Execution Context 并执行 Executable Code: 在上一步创建的 Execution Context 解释执行 Excutable Code。
一、执行上下文 1.1 概念 当函数执行时,会创建一个称为执行上下文的内部对象(可理解为作用域)。一个执行上下文定义了一个函数执行时的环境。...二、产生执行上下文的两个阶段 (1)在JavaScript解释器内部,每次调用执行上下文,分为两个阶段,①创建阶段 和 ②激活/代码执行阶段。...3.2 初始化过程 进入执行上下文时,VO的初始化过程具体如下: (1)函数的形参(当进入函数执行上下文时) 变量对象的一个属性,其属性名就是形参的名字,其值就是实参的值;对于没有传递的参数,其值为undefined...四、活动对象(Activation object) (1)只有全局上下文的变量对象允许通过VO的属性名称间接访问; (2)在函数执行上下文中,VO是不能直接访问的,此时由激活对象(Activation...参考文章 了解JavaScript的执行上下文 JavaScript 论代码执行上下文
什么是执行上下文? 其实,执行上下文,只是一个比较抽象的概念,待我慢慢道来。 打个比方:比如你尿急,是不是得上厕所。...执行上下文的类型 一般分为三种: 全局执行上下文:一般是指向 window 对象,一个程序只有一个全局上下文,指在浏览器的情况下。...函数执行上下文:每当函数执行的时候,都会创建一个属于函数的上下文执行环境,但是函数的执行上下文,可以有多个,因为函数里面还可以再嵌套函数。 eval执行上下文:平常不是很常用,我们不准备讲。 ?...js 引擎在执行代码的时候,会先执行放在执行栈前面的执行上下文,执行完就会释放掉,继续执行其他执行上下文,直到全局执行上下文执行完毕。 ?...js 引擎在执行脚本的时候,会先创建全局执行上下文,压入执行栈底部 然后碰到 first() 函数创建 first 函数执行上下文,将其压入执行栈中。
一、执行上下文 函数每一次调用就会产生一个新的执行上线文环境,它被放在执行上下文栈。变量或函数的上下文决定了它们可以访问哪些数据,以及它们的行为。...执行上下文栈会在其所有代码执行完毕把执行上下文弹出,将控制权返回给执行上下文。ECMAScript代码执行流就是通过执行上下文栈进行控制。...二、执行上下文类型 1.全局执行上下文是最外层的上下文,在浏览中全局上下文就是window对象。...2.作用域链,在执行上下文代码执行的时候,创建作用域链,作用域链决定执行上下文代码在访问变量和函数的顺序,权利。...2.执行 代码执行 3.回收 执行上下文出栈被垃圾回收机制进行回收。
递归执行上下文和堆栈 我们接着昨天的递归继续讲述关于递归的执行上下文,以及堆栈。 现在,让我们检查一下递归调用是如何工作的。为此,我们将深入研究功能。...有关正在运行的功能的执行过程的信息存储在其执行上下文中。...执行上下文是一个内部数据结构,它包含关于函数执行的详细信息:控制流现在的位置、当前变量、该变量的值(我们在这里不使用它)和很少的其他内部细节 一个函数调用只有一个与之相关的执行上下文。...与它相关的执行上下文被保存在一个特殊的数据结构中,称为执行上下文堆栈。 执行嵌套调用。 在它结束后,从堆栈中检索旧的执行上下文,外部函数从停止的地方恢复。...pow(2, 2) 执行嵌套调用时,JavaScript会在执行上下文栈中记住当前的执行上下文。 我们称这个函数为pow,但这完全不重要。
看了很多相关文章,写得很好,总结了ES3以及ES6对于执行上下文概念的描述,以及新的概念介绍。 什么是执行上下文 简而言之,执行上下文是评估和执行 JavaScript 代码的环境的抽象概念。...执行上下文的类型 JavaScript 中有三种执行上下文类型 「全局执行上下文」 — 这是默认或者说基础的上下文,任何不在函数内部的代码都在全局上下文中。...,当前执行上下文(局部环境)会被弹出执行上下文栈并且销毁,控制权被重新交给执行栈上一层的执行上下文。...ES3执行上下文总结 对于 ES3 中的执行上下文,我们可以用下面这个列表来概括程序执行的整个过程: 函数被调用 在执行具体的函数代码之前,创建了执行上下文 进入执行上下文的创建阶段: 对于每个找到的变量声明...当 second() 函数执行完毕,它的执行上下文会从当前栈弹出,并且控制流程到达下一个执行上下文,即 first() 函数的执行上下文。
深入理解执行上下文和执行栈 深入理解变量对象、作用域链和闭包 1.执行上下文 1.1 定义 执行上下文(execution context)是当前 JavaScript 代码被解析和执行时所在环境的抽象概念...函数执行上下文 无数个。每次调用函数时,都会为该函数创建一个新的执行上下文。...eval函数执行上下文 运行在 eval 函数中的代码也获得了自己的执行上下文,eval函数不常用,所以这里不讨论 2.执行栈 执行栈(execution stack),也即调用栈(call stack...每当调用函数的时候,都会为该函数创建一个新的执行上下文并将其push到栈顶;在函数执行完毕后,对应的执行上下文将会从栈顶pop出,上下文控制权将移到当前执行栈的下一个执行上下文。...,函数执行上下文出栈,此时的执行上下文是全局执行上下文。
执行上下文的类型 执行上下文总共有三种类型 全局执行上下文:只有一个,浏览器中的全局对象就是 window 对象,this 指向这个全局对象。...函数执行上下文:存在无数个,只有在函数被调用的时候才会被创建,每次调用函数都会创建一个新的执行上下文。 Eval 函数执行上下文: 指的是运行在 eval 函数中的代码,不用很少用而且不建议使用。...执行栈 执行栈,也叫调用栈,具有 LIFO(后进先出)结构,用于存储在代码执行期间创建的所有执行上下文。 首次运行JS代码时,会创建一个全局执行上下文并Push到当前的执行栈中。...根据执行栈LIFO规则,当栈顶函数运行完成后,其对应的函数执行上下文将会从执行栈中Pop出,上下文控制权将移到当前执行栈的下一个执行上下文。...执行上下文的创建 执行上下文分两个阶段创建:1)创建阶段; 2)执行阶段 创建阶段 1、确定 this 的值,也被称为 This Binding。
我们还得对执行上下文有一个进一步的了解。 在上一篇文章中,我们已经知道,当调用一个函数时(激活),一个新的执行上下文就会被创建。而一个执行上下文的生命周期可以分为两个阶段。...1、创建阶段 在这个阶段中,执行上下文会分别创建变量对象,建立作用域链,以及确定this的指向 2、代码执行阶段 创建完成之后,就会开始执行代码,这个时候,会完成变量赋值,函数引用,以及执行其他代码。...从这里我们就可以看出详细了解执行上下文极为重要,因为其中涉及到了变量对象,作用域链,this等很多人没有怎么弄明白,但是却极为重要的概念,因此它关系到我们能不能真正理解JavaScript。...在上例中,我们直接从test()的执行上下文开始理解。全局作用域中运行test()时,test()的执行上下文开始创建。...这样,如果再面试的时候被问到变量对象和活动对象有什么区别,就又可以自如的应答了,他们其实都是同一个对象,只是处于执行上下文的不同生命周期。
从他的类型上来分,我们可以将其分为三类:全局执行上下文、函数执行上下文、Eval 函数执行上下文。 全局执行上下文是是默认的、最基础的执行上下文。...一个程序中只能存在一个全局执行上下文。 函数执行上下文是指在每次调用函数时,都会为该函数创建一个新的执行上下文,这就是函数执行上下文,他可以有无数个。有多少个函数就有多少个函数执行上下文。...引擎会运行执行上下文在执行栈顶端的函数,当此函数运行完成后,其对应的执行上下文将会从执行栈中弹出,上下文控制权将移到当前执行栈的下一个执行上下文。...当 second() 函数执行完成后,它的执行上下文从当前执行栈中弹出,上下文控制权将移到当前执行栈的下一个执行上下文,即 first() 函数的执行上下文。...当 first() 函数执行完成后,它的执行上下文从当前执行栈中弹出,上下文控制权将移到全局执行上下文。一旦所有代码执行完毕,Javascript 引擎把全局执行上下文从执行栈中移除。
根据顺序我们也可以看出来,想要理解作用域链,执行上下文是我们碰到的第一个坎。 这一章我们就来讨论一下到底什么是执行上下文。 1....定义 当 JS 引擎开始执行预编译生成的代码时,就会进入到一个执行上下文(Executable Code - 简称 EC)。...但是在逻辑上,我们可以将活动的执行上下文看成一个栈结构。栈底部永远是全局上下文(global context),而顶部就是当前活动的执行上下文。执行到当前代码时,上下文入栈,执行完毕后,上下文出栈。...可执行代码有几种 前面说到当引擎执行到可执行代码的时候,就会将当前上下文压入上下文栈中。那么可执行的代码又分为几种?...如果有抛出的异常没有被截获的话,也有可能从一个或多个执行上下文中退出。当所有代码执行完以后,EC 中只会包含全局上下文(global context),当程序退出以后,全局上下文也会退出。
执行上下文是当前 JavaScript 代码被解析和执行时所在环境的抽象概念。...执行上下文总共有三种类型 全局执行上下文:只有一个,浏览器中的全局对象就是 window 对象,this 指向这个全局对象。...函数执行上下文:存在无数个,只有在函数被调用的时候才会被创建,每次调用函数都会创建一个新的执行上下文。...执行栈 执行栈,也叫调用栈,具有 LIFO(后进先出)结构,用于存储在代码执行期间创建的所有执行上下文。 首次运行JS代码时,会创建一个全局执行上下文并Push到当前的执行栈中。...根据执行栈LIFO规则,当栈顶函数运行完成后,其对应的函数执行上下文将会从执行栈中Pop出,上下文控制权将移到当前执行栈的下一个执行上下文。 ?
当执行 JS 代码时,会产生三种执行上下文 全局执行上下文 函数执行上下文 eval 执行上下文 每个执行上下文中都有三个重要的属性 变量对象(VO),包含变量、函数声明和函数的形参,该属性只能在全局上下文中访问...作用域链(JS 采用词法作用域,也就是说变量的作用域是在定义时就决定了) this var a = 10 function foo(i) { var b = 20 } foo() 对于上述代码,执行栈中有两个上下文...:全局上下文和函数 foo 上下文。...但是更准确的解释应该是:在生成执行上下文时,会有两个阶段。...对于非匿名的立即执行函数需要注意以下一点 var foo = 1 (function foo() { foo = 10 console.log(foo) }()) // -> ƒ foo
执行上下文与作用域 首先我们看一段概念,感觉很难理解,尽量多读几遍。如果不理解,那也无所谓。 变量或函数的上下文决定它们可以访问哪些数据,以及他们的行为。...每个上下文都有一个关联的变量对象,存储了上下文的所有变量和函数(代码无法访问的)。在代码执行完毕后销毁。 全局上下文 最外层的上下文,在浏览器中,全局上下文就是window对象。...上下文栈 每个函数调用都有自己的上下文,当代码执行流进入函数时,函数的上下文被推倒一个上下文栈上,执行完毕弹出,将控制权返还给之前的执行上下文。...作用域链 上下文代码执行时,会创建变量对象的一个作用域链。决定了各级上下文中的代码在访问变量和函数时的顺序。代码正在执行的上下文变量对象始终位于作用域链的最前端。...全局上下文的变量对象始终是作用域链的最后一个变量对象 作用域链增强 执行上下文主要有全局上下文和函数上下文两种。但也有其他方式来增强作用域链。如:with语句会向作用域链前段临时添加指定的对象。
每当 JavaScript 代码运行时,它都在执行上下文中运行;调用栈则可以在脚本调用多个函数时,跟踪每个函数在完成执行时应该返回的控制点。 什么是执行上下文?...简而言之,执行上下文是评估和执行 JavaScript 代码的环境的抽象概念。每当 Javascript 代码在运行的时候,它都是在执行上下文中运行。...执行上下文的类型 JavaScript 中有三种执行上下文类型。 全局执行上下文 — 这是默认或者说基础的上下文,任何不在函数内部的代码都在全局上下文中。...函数执行上下文 — 每当一个函数被调用时, 都会为该函数创建一个新的上下文。每个函数都有它自己的执行上下文,不过是在函数被调用时创建的。函数上下文可以有任意多个。...到现在,我们已经看过 JavaScript 怎样管理执行上下文了,现在让我们了解 JavaScript 引擎是怎样创建执行上下文的。 创建执行上下文有两个阶段:1) 创建阶段 和 2) 执行阶段。
领取专属 10元无门槛券
手把手带您无忧上云