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

JS执行上下文与调用

每当 JavaScript 代码运行时,它都在执行上下文中运行;调用则可以在脚本调用多个函数时,跟踪每个函数在完成执行时应该返回的控制点。 什么是执行上下文?...执行上下文的类型 JavaScript 中有三种执行上下文类型。 全局执行上下文 — 这是默认或者说基础的上下文,任何不在函数内部的代码都在全局上下文中。...函数执行上下文 — 每当一个函数被调用时, 都会为该函数创建一个新的上下文。每个函数都有它自己的执行上下文,不过是在函数被调用时创建的。函数上下文可以有任意多个。...调用列表: - greeting 10.当 greeting() 函数中的所有内容都执行完之后,返回到它的调用行继续执行其余的JS代码。 11.把 greeting() 方法从调用列表中删除。...调用列表: 空 我们从一个空的调用开始,当我们调用一个函数时,它会自动添加到调用中,在执行完所有代码之后,它会自动从调用中删除。最后,我们也得到了一个空。 怎么创建执行上下文

1.5K10

JS执行上下文和作用域链

一、JS执行上下文 执行上下文就是当前 JavaScript 代码被解析和执行时所在环境的抽象概念, JavaScript 中运行任何的代码都是在执行上下文中运行。...三、JS执行上下文(后面简称执行栈)   执行栈,也叫做调用,具有 LIFO (后进先出) 结构,用于存储在代码执行期间创建的所有执行上下文。...规则如下:   首次运行JavaScript代码的时候,会创建一个全局执行上下文并Push到当前的执行栈中,每当发生函数调用,引擎都会为该函数创建一个新的函数执行上下文并Push当前执行栈的顶。...当顶的函数运行完成后,其对应的函数执行上下文将会从执行栈中Pop出,上下文的控制权将移动到当前执行栈的下一个执行上下文。...,函数执行结束出而销毁,那么这些大对象组成一个链,就是作用域链。

63210
您找到你想要的搜索结果了吗?
是的
没有找到

【译】JS执行上下文和环境是什么?

下图是单线程的抽象视图: image.png 我们知道,当浏览器首次加载脚本时,它默认进入全局执行上下文。...代码的执行流程进入函数内部,该函数创建一个新的执行上下文,该上下文被推送到现有的顶部。...浏览器将始终执行位于顶部的当前执行上下文,并且一旦函数完成当前执行上下文,它将从顶弹出,将控制权返回当前上下文。...每次调用函数foo时,都会创建一个新的执行上下文。一旦上下文执行完毕,它就会弹出并且将控制权返回它下面的上下文,直到再次到达全局上下文。...理解执行上下文和环境可以让你了解代码的评估和你预期不同值的原因。 你是认为了解解释器的内部工作原理是多余的还是必要的JavaScript知识点呢?

75020

JS入门难点解析4-执行上下文

举例说明,当JS执行到一个函数的时候,就会创建该函数的“执行上下文(execution context)"。那么问题来了,JS代码中可能出现为数众多的函数,如何管理创建的那么多执行上下文呢? 3....执行上下文 JavaScript 引擎创建了执行上下文(Execution context stack,ECS)来管理执行上下文。...为了模拟执行上下文的行为,让我们定义执行上下文是一个数组: ECStack = []; 试想当 JavaScript 开始要解释执行代码的时候,最先遇到的就是全局代码,所以初始化的时候首先就会向执行上下文压入一个全局执行上下文...,就会创建一个执行上下文,并且压入执行上下文,当函数执行完毕的时候,就会将函数的执行上下文中弹出。...底层永远有个globalContext 参考 JavaScript深入之执行上下文 JS代码执行机制

47240

JS 执行上下文

程序代码中基本都会存在函数,那么调用函数,就会进入函数执行环境,对应就会生成该函数的执行上下文。 先插播一个知识点:JS是"单线程"! "单线程"! "单线程"!...JS中管理多个执行上下文 函数编程中,代码中会声明多个函数,对应的执行上下文也会存在多个。...程序执行进入一个执行环境时,它的执行上下文就会被创建,并被推入执行栈中(入);程序执行完成时,它的执行上下文就会被销毁,并从顶被推出(出),控制权交由下一个执行上下文。...因为JS执行中最先进入全局环境,所以处于"底的永远是全局环境的执行上下文"。...出图解 执行上下文的生命周期 执行上下文的生命周期有两个阶段: 创建阶段(进入执行上下文执行阶段(代码执行) 创建阶段:函数被调用时,进入函数环境,为其创建一个执行上下文,此时进入创建阶段。

4.1K41

JS入门难点解析8-作用域,作用域链,执行上下文执行上下文等分析

简介 JS入门难点系列到此,我们将进行一个阶段性的总结。将前面所学的有关作用域,LHS,RHS,执行上下文执行上下文,变量对象,作用域链,this等知识点串联起来,使大家有一个更新清晰的认识。...执行上下文:当JS执行到一个函数的时候,就会创建该函数的“执行上下文(execution context)"。...JS代码中可能出现为数众多的函数,所以JavaScript 引擎创建了执行上下文(Execution context stack,ECS)来管理执行上下文。...: 执行全局代码,创建全局执行上下文,全局上下文被压入执行上下文。...参考 JS入门难点解析3-作用域 JS入门难点解析4-执行上下文 JS入门难点解析5-变量对象 JS入门难点解析6-作用域链 JS入门难点解析7-this 一道js面试题引发的思考 JavaScript

65310

JS学习系列 05 - 执行上下文

定义 当 JS 引擎开始执行预编译生成的代码时,就会进入到一个执行上下文(Executable Code - 简称 EC)。...但是在逻辑上,我们可以将活动的执行上下文看成一个结构。底部永远是全局上下文(global context),而顶部就是当前活动的执行上下文执行到当前代码时,上下文执行完毕后,上下文。...可执行代码有几种 前面说到当引擎执行到可执行代码的时候,就会将当前上下文压入上下文中。那么可执行的代码又分为几种?...在这里,我们先假设定义执行上下文是一个数组: EC = []; 第一种可执行代码 -- 全局代码: 全局类型代码是在加载外部的 js 文件或者本地 标签中的代码。...,但是却不会退出 只有每次 return 的时候,才会退出当前执行上下文,相应上下文会从中弹出,指针会自动移动位置。

7810

JS面试点-执行上下文详解

执行 JS 代码时,会产生三种执行上下文 全局执行上下文 函数执行上下文 eval 执行上下文 每个执行上下文中都有三个重要的属性 变量对象(VO),包含变量、函数声明和函数的形参,该属性只能在全局上下文中访问...作用域链(JS 采用词法作用域,也就是说变量的作用域是在定义时就决定了) this var a = 10 function foo(i) { var b = 20 } foo() 对于上述代码,执行栈中有两个上下文...:全局上下文和函数 foo 上下文。...但是更准确的解释应该是:在生成执行上下文时,会有两个阶段。...() { foo = 10 ; console.log(foo) } 因为当 JS 解释器在遇到非匿名的立即执行函数时,会创建一个辅助的特定对象,然后将函数名称作为这个对象的属性,因此函数内部才可以访问到

88320

JS学习系列 05 - 执行上下文

定义 当 JS 引擎开始执行预编译生成的代码时,就会进入到一个执行上下文(Executable Code - 简称 EC)。...但是在逻辑上,我们可以将活动的执行上下文看成一个结构。底部永远是全局上下文(global context),而顶部就是当前活动的执行上下文执行到当前代码时,上下文执行完毕后,上下文。...可执行代码有几种 前面说到当引擎执行到可执行代码的时候,就会将当前上下文压入上下文中。那么可执行的代码又分为几种?...在这里,我们先假设定义执行上下文是一个数组: EC = []; 复制代码 第一种可执行代码 -- 全局代码: 全局类型代码是在加载外部的 js 文件或者本地 标签中的代码。...,但是却不会退出 复制代码 只有每次 return 的时候,才会退出当前执行上下文,相应上下文会从中弹出,指针会自动移动位置。

95330

JS词法环境和执行上下文

执行栈(Execution Context Stack)是用来管理执行期间创建的所有执行上下文的数据结构,它是一个LIFO(后进先出)的,它也是我们熟知的JS程序运行过程中的调用。...程序开始运行时,会先创建一个全局执行上下文并压入到执行栈中,之后每当有函数被调用,都会创建一个新的函数执行上下文并压入内。...将全局执行上下文压入执行栈,通常JS引擎都有一个指针running指向顶元素:图片JS引擎会将全局范围内声明的函数(foo)初始化在全局上下文中,之后开始一行行的执行代码,运行到console就在running...之后,完成bar和foo函数调用,会依次将上下文,直至全局上下文,程序结束运行。...总结本文关于执行上下文的理论知识比较多,不容易马上吸收理解,建议你逐渐消化、反复阅读理解。当你熟悉了执行上下文和词法环境,相信去理解认识更多JS特性和概念时,会更加轻松容易。

1.3K30

JS the Hardcore: 执行上下文(Execution Context)

类似,EC 就是一段代码涉及到的场景,在代码运行之前,js engine 会做一些变量内存分配,代码上下文关联的准备工作,这就是 EC。...当程序流程需要从当前的 EC 进入另外一个和当前上下文无关的代码片段时,会创建一个新的 EC,并被推入中。...这就是「执行上下文」(Execution Context Stack),可以看作是 调用的镜像。...由于所有的 js 代码都存在于全局环境中,所以首先会创建 「全局执行上下文」(Global Execution Context),除此之外,js 中每一次的函数调用也会生成 EC,所以底肯定会是 全局执行上下文...EC 的情况,可以参照下图「调用」(Call Stack)的状态: ? 到这里就基本上把执行上下文的一些基本概念讲完了,其中涉及到的一些内容目前不理解没有关系,后面会慢慢解释。

99370

JavaScript核心概念之执行上下文

桃翁桃翁,问个问题呢,据说 js 里面有个执行上下文,这个概念是个什么东东哦?据说挺重要的,给我科普科普呗。 Emm… 这个概念非常的抽象,简单来说呢,就是 JS执行某段代码的时候做的一些事情。...在之前说的执行上下文就是解释器在执行 JS 某段代码的时候做的一些事,那么首先我们把代码分个类。 Global 代码:代码第一次执行时默认的环境。 Function 代码:执行到一个函数中。...那这个执行上下文基本知道是个什么东西了,那执行上下文又是啥呢? 见名知意,执行上下文就是执行上下文(包含全局执行上下文)形成的嘛。 那为什么要有这个执行上下文呢?...如下是一张经典的执行上下文的图。 ? 图 2 默认进入全局上下文。如果你的全局代码中调用了一个函数,那么程序将会进入这个被调用函数的上下文,创建一个新的执行上下文,并把当前上下文放到顶。...浏览器总是会把当前执行上下文放到的顶部,一旦函数执行完成,这个执行上下文就会从中移除,返回到中的下一个上下文

35810

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

执行上下文执行栈是js执行机制中的两个概念,要想深入的对js进行理解与应用,理解js的机制很重要,下面来说一下什么是执行上下文,什么又是执行栈。...从他的类型上来分,我们可以将其分为三类:全局执行上下文、函数执行上下文、Eval 函数执行上下文。 全局执行上下文是是默认的、最基础的执行上下文。...一个程序中只能存在一个全局执行上下文。 函数执行上下文是指在每次调用函数时,都会为该函数创建一个新的执行上下文,这就是函数执行上下文,他可以有无数个。有多少个函数就有多少个函数执行上下文。...执行执行栈就很好理解了,因为他是一个,在其他编程语言中也被叫做调用,所以他也具有 LIFO(后进先出)结构,主要用于存储在代码执行期间创建的所有执行上下文。...引擎会运行执行上下文执行栈顶端的函数,当此函数运行完成后,其对应的执行上下文将会从执行栈中弹出,上下文控制权将移到当前执行栈的下一个执行上下文

1.7K20

谈谈我对 JavaScript执行上下文理解

在 JavaScript 中,通过的存取方式来管理执行上下文,我们可称其为执行栈,或函数调用(Call Stack)。 数据结构 先来简单复习一下这种数据结构。...总结数据结构的特点: 后进先出,先进后出 出口在顶部,且仅有一个 执行栈(函数调用) 理解完的存取方式,我们接着分析 JavaScript 中如何通过来管理多个执行上下文。...程序执行进入一个执行环境时,它的执行上下文就会被创建,并被推入执行栈中(入);程序执行完成时,它的执行上下文就会被销毁,并从顶被推出(出),控制权交由下一个执行上下文。...因为 JavaScript 在执行代码时最先进入全局环境,所以处于底的永远是全局环境的执行上下文。而处于顶的是当前正在执行函数的执行上下文。...而全局环境只有一个,对应的全局执行上下文也只有一个,只有当页面被关闭之后它才会从执行栈中被推出,否则一直存在于底。

24530

JS执行上下文作用域闭包

一、执行上下文 单线程 同步执行,只有顶的上下文处于执行中,其他上下文需要等待 全局上下文只有唯一的一个,它在浏览器关闭时出 函数的执行上下文的个数没有限制 每次某个函数被调用,就会有个新的执行上下文为其创建...—— return 2、函数作用域 js没有块级作用域,而有函数作用域。 函数作用域是指:在函数内声明的所有变量在函数体内是始终可见的。...);   result(); // 999 f2()就是闭包 闭包的作用 ---- 四、this 全局函数里,this 等于window 函数被作为某个对象的方法调用时,this等于那个对象 匿名函数执行环境具有全局性...,this指向window (可以通过call()或apply()改变函数执行环境)

1.2K30

稳扎稳打JS——执行上下文

上下文环境的初始化在代码执行前完成 JS有三种作用域:全局作用域、函数作用域、eval作用域(不常用,不做介绍)。...在JS代码执行前,首先会对这三种作用域进行上下文环境的准备工作,准备内容如下: 全局作用域的上下文准备工作 将全局变量设为undefined 将函数表达式的值设为undefined 为函数声明直接赋值...运行时才能确定,而全局作用域中的this在准备上下文环境的时候就确定了(window)。...因为在代码运行前的准备上下文环境过程中,函数的初始化已经完成,所以运行时无论函数调用语句在哪儿,JS编译器都能调用这个函数。 若采用函数表达式来定义函数,则函数定义一定要在函数调用语句之前!...JS中作用域只有三种:全局作用域、函数作用域、eval作用域。除此之外就没有作用域了!如:for、if、while等都不是独立的作用域! 因此在里面定义的局部变量都属于其所属的外层作用域。

1.1K70

【说站】Js如何存储执行上下文

Js如何存储执行上下文 1、执行上下文存在于数据中。该保存代码运行是创建的所有上下文的特点是后进先出,每创建一个新的上下文,就会压入的顶部。...当函数执行完成时,上下文中弹出,控制过程到达中的下一个上下文。 2、当js引擎第一次触摸脚本时,它将创建一个全局的上下文,并将其压入中。...,入上下文执行栈 同理   F2(name);     //F2 出   console.log(sex); //sex未创建,未赋值,且作用域链中也没有,所以报错 sex not defined }...// 创建F1上下文,入上下文执行栈 F1(); // F1出 // 全局上下文 以上就是Js存储执行上下文的方法,希望对大家有所帮助。...更多js学习指路:js教程 收藏 | 0点赞 | 0打赏

95630

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

通过这篇文章,你应该能够清楚地了解到 JS 解释器究竟在干嘛,为什么可以在一些函数和变量声明之前就能使用,以及它们的值是怎样被决定的。 什么是执行上下文(Execution Context)?...代码的执行流进入内部函数,这将创建一个新的执行上下文,它被压入现有的顶部。...浏览器永远会执行当前中顶部的执行上下文 一旦函数在当前执行上下文执行完毕,它会被从的顶部弹出,然后将控制权移交给当前的下一个上下文当中。...每次函数 foo 被调用的时候, 就会创建一个新的执行上下文。 一旦上下文执行完毕之后, 它就会从中弹出并且返回控制权到下一个上下文当中,直到全局上下文 又再次被访问。...你认为了解JS 解释器的内部工作原理太过多余了还是对你的 JavaScript 知识非常有帮助 ? 了解执行上下文的阶段能帮助你书写更好的 JavaScript 代码吗 ?

70310
领券