首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

javascript会为每个函数创建执行上下文吗?

是的,JavaScript 会为每个函数创建一个执行上下文(Execution Context)。执行上下文是 JavaScript 引擎在运行时为函数调用创建的一个临时环境,它包含了函数运行时所需的所有信息,如变量对象、作用域链、this 绑定等。

每当一个函数被调用时,JavaScript 引擎都会为其创建一个新的执行上下文,并将其推入执行上下文栈(Execution Context Stack)。执行上下文栈是一个后进先出(LIFO)的数据结构,用于存储当前正在执行的函数及其相关的执行上下文。

当一个函数执行完毕,其对应的执行上下文会从执行上下文栈中弹出,控制权会回到下一个栈顶的执行上下文,即下一个正在执行的函数。

总结一下,JavaScript 会为每个函数创建一个执行上下文,并将其存储在执行上下文栈中。当函数执行完毕,其执行上下文会从栈中弹出,控制权会转移到下一个函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript执行(三):你知道现在有多少种函数

JavaScript,切换上下文最主要的场景是函数调用。在这一课,我们就来讲讲函数调用切换上下文的事情。我们在讲函数调用之前,首先来认识一下函数家族。...在 JavaScript 标准中,为函数规定了用来保存定义时上下文的私有属性[[Environment]]。...当一个函数执行时,会创建一条新的执行环境记录,记录的外层词法环境(outer lexical environment)会被设置成函数的[[Environment]]。...JavaScript 用一个栈来管理执行上下文,这个栈中的每一项又包含一个链表。 如下图所示: 当函数调用时,会入栈一个新的执行上下文函数调用结束时,执行上下文被出栈。...console.log(this); } var o = { showThis: showThis } showThis(); // undefined o.showThis(); // o 函数创建新的执行上下文中的词法环境记录时

42930
  • JS到底是怎么执行的:一文彻底搞清执行上下文

    GEC是基本的/默认的执行上下文,所有不在函数内的JavaScript代码都在这里执行。 注:对于每个JavaScript文件,只能有一个GEC。...由于每个函数调用都有自己的FEC,所以在脚本的运行时可以有多个FEC。 执行上下文是如何被创建的? 前面我们知道了什么是执行上下文,现在让我们看看执行上下文是如何被创建的。...因此,当其他操作、函数和事件发生时,将为每个事件创建一个执行上下文。由于JavaScript的单线程特性,一个堆积的执行上下文堆栈被创建,称为执行堆栈。...对于每个函数调用,都会为函数创建一个新的FEC,并置于当前正在执行执行上下文之上。 位于执行堆栈顶部的执行上下文成为活动的执行上下文,并且总是首先由JS引擎执行。...因为它们没有在任何函数中定义,所以函数声明在GEC中。现在明白了吗? 当JS引擎遇到first()函数调用时,会为创建一个新的FEC。这个新上下文被置于当前上下文的顶部,形成了所谓的执行堆栈。

    1.4K60

    JS 到底是在干嘛:一文搞懂JS 执行上下文

    GEC是基本的/默认的执行上下文,所有不在函数内的JavaScript代码都在这里执行。 注:对于每个JavaScript文件,只能有一个GEC。...由于每个函数调用都有自己的 FEC,所以在脚本的运行时可以有多个 FEC。 执行上下文是如何被创建的? 前面我们知道了什么是执行上下文,现在让我们看看执行上下文是如何被创建的。...因此,当其他操作、函数和事件发生时,将为每个事件创建一个执行上下文。由于JavaScript的单线程特性,一个堆积的执行上下文堆栈被创建,称为执行堆栈。...对于每个函数调用,都会为函数创建一个新的FEC,并置于当前正在执行执行上下文之上。 位于执行堆栈顶部的执行上下文成为活动的执行上下文,并且总是首先由JS引擎执行。...因为它们没有在任何函数中定义,所以函数声明在GEC中。现在明白了吗? 当JS引擎遇到first()函数调用时,会为创建一个新的FEC。

    38510

    (ES5版)深入理解 JavaScript 执行上下文执行

    函数执行上下文 — 每当一个函数被调用时, 都会为函数创建一个新的上下文每个函数都有它自己的执行上下文,不过是在函数被调用时创建的。函数上下文可以有任意多个。...当 JavaScript 引擎第一次遇到你的脚本时,它会创建一个全局的执行上下文并且压入当前执行栈。每当引擎遇到一个函数调用,它会为函数创建一个新的执行上下文并压入栈的顶部。...当遇到 first() 函数调用时,JavaScript 引擎为该函数创建一个新的执行上下文并把它压入当前执行栈的顶部。...当从 first() 函数内部调用 second() 函数时,JavaScript 引擎为 second() 函数创建了一个新的执行上下文并把它压入当前执行栈的顶部。...到现在,我们已经看过 JavaScript 怎样管理执行上下文了,现在让我们了解 JavaScript 引擎是怎样创建执行上下文的。 创建执行上下文有两个阶段:1) 创建阶段 和 2) 执行阶段。

    93010

    如何理解js的执行上下文执行

    一个程序中只能存在一个全局执行上下文函数执行上下文是指在每次调用函数时,都会为函数创建一个新的执行上下文,这就是函数执行上下文,他可以有无数个。有多少个函数就有多少个函数执行上下文。...每个函数都拥有自己的执行上下文,但是只有在函数被调用的时候才会被创建。一个程序中可以存在任意数量的函数执行上下文。每当一个新的执行上下文创建,它都会按照特定的顺序执行一系列步骤。...当 JavaScript 引擎首次读取你的脚本时,它会创建一个全局执行上下文并将其推入当前的执行栈。每当发生一个函数调用,引擎都会为函数创建一个新的执行上下文并将其推到当前执行栈的顶端。...当调用 first() 函数时,JavaScript 引擎为该函数创建了一个新的执行上下文并将其推到当前执行栈的顶端。...执行上下文创建 执行上下文会分为两个阶段创建:1.创建阶段 2.执行阶段 创建阶段 在任意的 JavaScript 代码被执行前,执行上下文处于创建阶段。

    1.7K20

    从底层理解this是什么

    执行函数 add() 之前,也就是第6行之前,JavaScript 引擎会为上面这段代码创建全局执行上下文,包含了声明的函数和变量,你可以参考下图: [17080712557fc4bd?...当调用该函数时,JavaScript 引擎会编译该函数,并为这个函数创建一个执行上下文,最后将该函数执行上下文压入栈中,如下图所示: [17080688f898caee?...w=1137&h=789&f=png&s=374757] 第三步,当执行到 add 函数调用语句时,同样会为创建执行上下文,并将其压入调用栈,如下图所示: [1708077ae74bb9ad?...w=1134&h=607&f=png&s=338692] 从图中可以看出,this 是和执行上下文绑定的,也就是说每个执行上下文中都有一个 this 执行上下文主要分为三种 全局执行上下文 函数执行上下文...this存放在每个执行上下文中 this是如何出现,又是如何消失的? this随着执行上下文出现,当执行上下文被回收后,也随之消失 this有什么作用?

    76520

    「查缺补漏」JavaScript执行上下文-执行

    函数执行上下文」 — 每当一个函数被调用时, 都会为函数创建一个新的上下文每个函数都有它自己的执行上下文,不过是在函数被调用时创建的。函数上下文可以有任意多个。...ES3执行上下文总结 对于 ES3 中的执行上下文,我们可以用下面这个列表来概括程序执行的整个过程: 函数被调用 在执行具体的函数代码之前,创建执行上下文 进入执行上下文创建阶段: 对于每个找到的变量声明...当 JavaScript 引擎第一次遇到你的脚本时,它会创建一个全局的执行上下文并且压入当前执行栈。每当引擎遇到一个函数调用,它会为函数创建一个新的执行上下文并压入栈的顶部。...当遇到 first() 函数调用时,JavaScript 引擎为该函数创建一个新的执行上下文并把它压入当前执行栈的顶部。...当从 first() 函数内部调用 second() 函数时,JavaScript 引擎为 second() 函数创建了一个新的执行上下文并把它压入当前执行栈的顶部。

    57150

    浏览器工作原理 - 浏览器中的 JavaScript

    ; 在执行函数 add() 之前,JavaScript 引擎会为代码创建全局执行上下文,包含声明的函数和变量。...JavaScript 的调用栈 在执行上下文创建好后,JavaScript 引擎会将执行上下文压入栈中,通常将用来管理执行上下文的栈称执行上下文栈,也叫调用栈。...函数,当调用该函数时,JavaScript 引擎会编译该函数,并为其创建一个执行上下文,最后还将该函数执行上下文压入栈: addAll 函数执行上下文创建好之后,便进入函数代码的执行阶段 当执行到...add 函数调用语句时,同样会为创建执行上下文,并将其压入调用栈 当 add 函数返回时,该函数执行上下文就会从栈顶弹出,并将 result 的值设置为 add 函数的返回值,也就是 9...# this # JavaScript 中的 this 是什么 this 是和执行上下文绑定的,即每个执行上下文中都有一个 this。

    54330

    作者学习完《浏览器基本原理与实践》后的 36 点总结

    javascript 代码是按顺序执行 JavaScript 代码在执行之前需要先编译,在编译阶段,变量和函数会被存放到变量环境中,变量默认值会被设置为 undefined; 在代码执行阶段,JavaScript...每调用一个函数JavaScript 引擎会为创建执行上下文压入调用栈,然后,JavaScript 引擎开始执行函数代码。...如果一个函数 A 调用另外一个函数 B,那么 JavaScript 引擎会为 B 函数创建执行上下文,并将 B 函数执行上下文压入栈顶。...的执行上下文创建时,它的 this 就指向 tempObj 对象; 然后执行 CreateObj 函数,此时的 CreateObj 函数执行上下文中的 this 指向 tempObj 对象; 最后返回...; V8 在执行 javascript 脚本时,会为创建一个全局执行上下文,同时会创建一个微任务队列; 执行微任务过程中产生的微任务不会推迟到下个宏任务中执行,而是在当前宏任务中继续执行; 使用 Promise

    1.1K10

    JS执行上下文与调用栈

    每当 JavaScript 代码运行时,它都在执行上下文中运行;调用栈则可以在脚本调用多个函数时,跟踪每个函数在完成执行时应该返回的控制点。 什么是执行上下文?...执行上下文的类型 JavaScript 中有三种执行上下文类型。 全局执行上下文 — 这是默认或者说基础的上下文,任何不在函数内部的代码都在全局上下文中。...函数执行上下文 — 每当一个函数被调用时, 都会为函数创建一个新的上下文每个函数都有它自己的执行上下文,不过是在函数被调用时创建的。函数上下文可以有任意多个。...调用栈 调用栈是解析器(如浏览器中的的javascript解析器)的一种机制,可以在脚本调用多个函数时,跟踪每个函数在完成执行时应该返回控制的点。...到现在,我们已经看过 JavaScript 怎样管理执行上下文了,现在让我们了解 JavaScript 引擎是怎样创建执行上下文的。 创建执行上下文有两个阶段:1) 创建阶段 和 2) 执行阶段。

    1.5K10

    JavaScript——代码的执行

    局部上下文函数执行上下文每个函数都有自己的执行上下文,当执行进入一个函数时,函数执行上下文就会被推入一个执行上下文栈的顶部并获取执行权。...当这个函数执行完毕,它的执行上下文又从这个栈的顶部被删除,并把执行权并还给之前执行上下文。这就是JavaScript程序中的执行流。...执行上下文与作用域的关联是:执行上下文会为执行中的代码维护一个作用域链,里面包含了代码可以访问的各个名字对象,当代码中出现访问某个标识符(变量名,函数名等),JavaScript引擎会根据这个作用域链顺序进行查找...流程 在JavaScript中,程序代码是在执行上下文环境里被执行的,这包括两个阶段: 为代码创建执行上下文 包括 创建arguments对象,初始化参数名称和值 扫描代码中的函数声明,将该函数对象放入变量对象...扫描代码中的变量声明,将该变量对象放入变量对象,这个阶段变量的赋值语句并不执行,所以所有变量的值都是undefined 创建变量对象 初始化作用域链 判断this对象 执行代码 在当前上下文上解释执行代码

    85820

    Chrome 页面呈现原理与性能优化之企业级分享总结(内附完整ppt)

    并不是布局树的每个节点都包含一个图层,如果一个节点没有对应的层,那么这个节点就从属于父节点的图层。那么需要满足什么条件,渲染引擎才会为特定的节点创建新的层呢?...每个任务被称为帧(stack of frames) Context(执行上下文) 执行上下文JavaScript 执行一段代码时的运行环境,比如调用一个函数,就会进入这个函数执行上下文,确定该函数执行期间用到的诸如...函数执行上下文 — 每当一个函数被调用时, 都会为函数创建一个新的上下文每个函数都有它自己的执行上下文,不过是在函数被调用时创建的。函数上下文可以有任意多个。...创建执行上下文有两个阶段:1) 编辑(创建)阶段 和 2) 执行阶段。举个例子: ? Call Stack(调用栈) JavaScript 引擎正是利用栈的这种结构来管理执行上下文的。...在执行上下文创建好后,JavaScript 引擎会将执行上下文压入栈中,通常把这种用来管理执行上下文的栈称为执行上下文栈,又称调用栈。

    1.6K20

    JS执行上下文栈和作用域链

    一、JS执行上下文 执行上下文就是当前 JavaScript 代码被解析和执行时所在环境的抽象概念, JavaScript 中运行任何的代码都是在执行上下文中运行。...执行上下文类型分为:全局执行上下文函数执行上下文执行上下文创建过程中,需要做以下几件事: (1)创建变量对象:首先初始化函数的参数arguments,提升函数声明和变量声明。...(2)创建作用域链(Scope Chain):在执行上下文创建阶段,作用域链是在变量对象之后创建的。...规则如下:   首次运行JavaScript代码的时候,会创建一个全局执行上下文并Push到当前的执行栈中,每当发生函数调用,引擎都会为函数创建一个新的函数执行上下文并Push当前执行栈的栈顶。...四、作用域链   我们知道函数执行时是有个执行栈,在函数执行的时候会创建执行环境,也就是执行上下文,在上下文中有个大对象,保存执行环境定义的变量和函数,在使用变量的时候,就会访问这个大对象,这个对象会随着函数的调用而创建

    66610

    前端入门17-JavaScript进阶之作用域声明正文-作用域

    我比较喜欢这种翻译,解析阶段主要的工作就是解析上下文内的代码,创建执行上下文创建变量对象 VO 等,为执行阶段做准备;而执行阶段就是代码实际运行过程。...,那么当执行全局代码时,首先进入全局执行上下文的解析阶段: 解析代码创建全局执行上下文 创建VO,并为其添加属性 i、A 省略该过程其他工作 将创建的全局EC放入ECS栈内 ?...如果执行的代码是调用某个函数,此时就会为这个函数执行创建一个函数执行上下文,那么这个过程同样需要两个阶段:解析阶段和执行阶段。...所以当代码执行到最后一行 A() 时,此时新的函数执行上下文的解析阶段做的工作: 解析 A() 函数内代码,并创建函数执行上下文 A函数EC 创建 AO,并为其添加属性 省略其他工作介绍 将创建的A函数...所以当执行函数 A 内的代码时,第一行输出才会输出 undefined,因为变量的声明提前特性在调用函数创建函数执行上下文的过程中,已经解析了函数内的声明语句,并将这些变量添加到函数上下文 EC 的

    53820

    JavaScript-作用域、块级作用域、上下文执行上下文、作用域链

    2、每当执行函数时,都会创建和销毁该变量,且无法通过函数之外的任何代码访问该变量。 ? 3、函数外无法访问函数内的变量,函数内却可以访问函数外的变量。 ?...局部作用域只在该函数调用执行期间存在。 七、上下文 vs 作用域 (1)首先需要说明的是上下文和作用域是不同的概念。 (2)每个函数调用都有与之相关的作用域和上下文。...九、执行上下文 (1)当函数执行时,会创建一个称为执行上下文的内部对象(可理解为作用域,不是前面讨论的上下文)。一个执行上下文定义了一个函数执行时的环境。...(2)函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文。 (3)当javascript代码文件被浏览器载入后,默认最先进入的是一个全局的执行上下文。...当在全局上下文中调用执行一个函数时,程序流就进入该被调用函数内,此时引擎就会为函数创建一个新的执行上下文,并且将其压入到执行栈顶部(作用域链)。

    2.2K21

    深入理解执行上下文执行

    深入理解执行上下文执行栈 深入理解变量对象、作用域链和闭包 1.执行上下文 1.1 定义 执行上下文(execution context)是当前 JavaScript 代码被解析和执行时所在环境的抽象概念...它创建了一个全局对象(浏览器中是window对象),并将this指向该对象。 函数执行上下文 无数个。每次调用函数时,都会为函数创建一个新的执行上下文。...当 JavaScript 引擎首次读取脚本时,它会创建一个全局执行上下文并将其push到当前的执行栈。...每当调用函数的时候,都会为函数创建一个新的执行上下文并将其push到栈顶;在函数执行完毕后,对应的执行上下文将会从栈顶pop出,上下文控制权将移到当前执行栈的下一个执行上下文。...,我们遇到了multiply(20, 30),这是一个函数调用语句,所以此时创建了该函数对应的函数执行上下文并压栈,函数执行上下文创建阶段的伪代码如下: FunctionExectionContext

    76930

    【Node.js】你真的了解 Node.js 么

    通过 Node.js,JavaScript 不仅仅可以写在浏览器端,我们可以在我们的电脑中直接执行 JavaScript,也是完成 web 服务应用的非常好的选择,这降低了我们成为全栈工程师的门槛。...Node.js 开始启动进程的时候,Node.js 会创建一个循环,每次循环运行就是一个 Tick 周期,每个 Tick 周期中会从事件队列查看是否有事件需要处理,如果有就取出事件并执行相关的回调函数。...单线程 在 Java、PHP 或者 .net 等服务器端语言中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约 2MB 内存。...但 Node.js 不为每个客户连接创建一个新的线程,而仅仅使用一个线程。...也就是说,这个单线程指的是 JavaScript 的单线程,Node 自身其实是多线程的。也就是说除了用户代码无法并行执行之外,所有的 I/O (磁盘I/O,网络 I/O 等)则是可以并行起来的。

    5.4K10

    JavaScript 中的执行上下文和调用栈是什么

    你可以有很多个 函数上下文, 每个函数调用都创造一个新的上下文, 并创建出一个局部作用域,任何在作用域内部声明的东西都不能被当前函数作用域外部访问到。...关于 执行上下文 有五个要点是要记住的: 单线程。 同步执行。 只有一个全局上下文。 可有无数个函数上下文每个函数调用都会创建一个新的 执行上下文,哪怕是递归调用。...执行上下文中的细节 现在我们已经知道了每个函数调用都会创建一个新的 执行上下文 。...然而,在 JavaScript 解释器内部,对每个执行上下文的调用会经历两个阶段: 创建阶段 [当函数被调用, 但内部的代码还没开始执行]: 创建 作用域链....你认为了解JS 解释器的内部工作原理太过多余了还是对你的 JavaScript 知识非常有帮助 ? 了解执行上下文的阶段能帮助你书写更好的 JavaScript 代码 ?

    72710

    浏览器相关原理(面试题)详细总结二

    创建布局树,并计算元素的布局信息。 对布局树进行分层,并生成分层树。 为每个图层生成绘制列表,并将其提交到合成线程。合成线程将图层分图块,并栅格化将图块转换成位图。...出现这种裁剪情况的时候,渲染引擎会为文字部分单独创建一个层,如果出现滚动条,滚动条也会被提升为单独的层。 04 — JavaScript 是如何支持块级作用域的?...词法环境跟函数上下文,都是通过栈结构实现的。...函数内部通过 var 声明的变量,在编译阶段全都被存放到变量环境(函数上下文)中,而通过let和const申明的变量会被追加到词法环境中,当这个块执行结束之后,追加到词法作用域的内容又会销毁掉。...JavaScript 引擎需要用栈来维护程序执行期间上下文的状态,如果栈空间大了话,所有的数据都存放在栈空间里面,那么会影响到上下文切换的效率,进而又影响到整个程序的执行效率。

    1K10
    领券