请问您是在询问关于"EVAL"的定义、分类、优势、应用场景,还是关于云计算领域的一些名词词汇呢?
上一节我们讨论了执行上下文,那么在上下文中到底有什么内容,为什么它会和作用域链扯上关系,JS 解释器又是怎么找到我们声明的函数和变量,看完这一节,相信大家就不会再迷惑了。...不同执行上下文中的变量对象 执行上下文包括:全局上下文、函数上下文和 eval() 上下文。...函数上下文中的变量对象 在函数上下文中,变量对象用活动对象 AO(Active Object)来表示。...进入执行上下文 当引擎进入执行上下文时(代码还未执行),VO 里已经包含了一些属性: 函数的所有形参(如果是函数执行上下文) 由名称和对应值组成的一个变量对象的属性被创建,如果没有传递对应的实参,那么由名称和...() 上下文中不起作用。
不同执行上下文中的变量对象 执行上下文包括:全局上下文、函数上下文和 eval() 上下文。...函数上下文中的变量对象 在函数上下文中,变量对象用活动对象 AO(Active Object)来表示。...进入执行上下文 当引擎进入执行上下文时(代码还未执行),VO 里已经包含了一些属性: 函数的所有形参(如果是函数执行上下文) 由名称和对应值组成的一个变量对象的属性被创建,如果没有传递对应的实参,那么由名称和...,则变量名不会干扰已经存在的这类属性,如果已经存在相同的变量名,则跳过当前声明的变量名。...() 上下文中不起作用。
上下文中的局部变量 })(); alert(a); // 10 alert(b); // 全局变量 "b" 没有声明 并且,很多程序员也都知道,当前ECMAScript规范指出独立作用域只能通过“函数...(从本质上说,在具体执行上下文中,VO名称是不一样的,并且初始结构也不一样。 不同执行上下文中的变量对象 对于所有类型的执行上下文来说,变量对象的一些操作(如变量初始化)和行为都是共通的。...同样在函数上下文中也定义和变量对象相关的额外内容。...进入执行上下文 当进入执行上下文(代码执行之前)时,VO里已经包含了下列属性(前面已经说了): 函数的所有形参(如果我们是在函数执行上下文中) — 由名称和对应值组成的一个变量对象的属性被创建;没有传递对应参数的话...,那就是eval上下文,变量没有{DontDelete}特性。
(函数声明,缩写形式为FD) 函数形参 以上内容均在上下文中声明。...// context data(var, FD, function arguments) }} 只有全局上下文中的变量对象可以通过VO的属性名称间接访问、使用(其中全局变量自身就是变量对象)。...从根本上来说,在不同的具体执行上下文中,VO的名称和初始结构都是不同的。 不同执行上下文中的变量对象 变量对象的某些操作(例如:变量实例化)和表现对于所有的执行上下文类型都成很普通的。...VO(globalContext) === global; 准确理解 全局上下文中的变量对象就是全局变量自身 是非常有必要的,基于这个事实,在全局上下文中声明一个变量的时候,我们才可以通过全局对象的属性访问到这个变量...在 eval 上下文中,声明的变量没有 {DontDelete} 属性: eval('var a = 10;');alert(window.a); // 10 alert(delete a); // true
因此,任意一个eval的使用都会强制浏览器进行冗长的变量名称查找,以确定变量在机器代码中的位置并设置其值。 Function 是替代 eval 的一个好的方法。...vm可以使用v8的Virtual Machine contexts动态地编译和执行代码,而代码的执行上下文是与当前进程隔离的,但是这里的隔离并不是绝对的安全,不完全等同浏览器的沙箱环境。..., 再在此上下文中执行编译的 code,最后返回结果。...global 对象的上下文中编译并执行 code,最后返回结果。...运行中的代码无法获取本地作用域,但可以获取当前的 global 对象。
eval函数执行上下文 执行在eval函数中的代码会有属于他自己的执行上下文,不过eval函数不常使用, 在JavaScript中,eval()函数用于执行一个字符串表达式,并返回表达式的值。...它的执行上下文通常是当前的全局和局部变量。...创建执行上下文 创建执行上下文有两个阶段:创建阶段和执行阶段 1)创建阶段 (1)this绑定 在全局执行上下文中,this指向全局对象(window对象) 在函数执行上下文中,this指向取决于函数如何调用...判断传入上下文对象是否存在,如果不存在,则设置为 window 。 处理传入的参数,截取第一个参数后的所有参数。 将函数作为上下文对象的一个属性。 使用上下文对象来调用这个方法,并保存返回结果。...判断传入上下文对象是否存在,如果不存在,则设置为 window 。 将函数作为上下文对象的一个属性。 判断参数值是否传入 使用上下文对象来调用这个方法,并保存返回结果。
执行上下文 简而言之,执行上下文就是当前 JavaScript 代码被解析和执行时所在环境的抽象概念, JavaScript 中运行任何的代码都是在执行上下文中运行。...从他的类型上来分,我们可以将其分为三类:全局执行上下文、函数执行上下文、Eval 函数执行上下文。 全局执行上下文是是默认的、最基础的执行上下文。...Eval 函数执行上下文:是指运行在 eval 函数中的代码创建的自己的执行上下文。...当 second() 函数执行完成后,它的执行上下文从当前执行栈中弹出,上下文控制权将移到当前执行栈的下一个执行上下文,即 first() 函数的执行上下文。...: 全局环境(在全局执行上下文中)是一个没有外部环境的词法环境。
Eval代码 - eval函数内部的文本。【eval不建议使用】 你可以在网上查到大量的关于scope(作用域)的资料,本文的目的就是要让事情更加容易理解。...我们把术语执行上下文视为当前代码的评估环境/范围。现在,条件充足,我们看个包含全局和函数/本地上下文评估代码的示例。...你可以拥有任意数量的函数上下文,并且每个函数调用都会创建一个新的上下文,从而创建一个私有的作用域,无法从当前函数作用域外直接访问函数内部声明的任何内容。...浏览器将始终执行位于栈顶部的当前执行上下文,并且一旦函数完成当前执行上下文,它将从栈顶弹出,将控制权返回当前栈的栈顶上下文。...如果变量名称已存在于变量对象(或活动对象)中,则不执行任何操作并继续扫描(即跳过)。 确定上下文中的this。 激活/代码执行阶段: 在上下文中运行/解释功能代码,并在代码逐行执行时分配变量值。
”inner“,eval的代码是在调用eval的上下文中执行。...直接调用和间接调用下文会讨论,而关于在非严格模式并且直接调用eval,与上文提到的行为一样的,代码在调用上下文中执行。...全局上下文下eval 内建的eval并不会在全局上下文中执行代码,我们来看看其他的一些选项,来实现跨浏览器的全局代码执行。...它可以将代码放到全局上下文中执行,但是该函数并不会有返回值。...这样,代码看起来像是在全局上下文中执行一样,尽管全局上下文是作用域链中仅有的一个对象。 通过new Function创建的变量等保存在函数的AO中,而不是全局上下文中。
Eval code- 要在eval函数内执行的文本。 你可以阅读大量涉及作用域的在线资料,不过为了使事情更容易理解,让我们将术语“执行上下文”视为当前代码的运行环境或作用域。...如果在当前函数中调用另一个函数,则会发生同样的事情。 代码的执行流程进入内部函数,该函数创建一个新的执行上下文,该上下文被推送到现有堆栈的顶部。...浏览器将始终执行位于堆栈顶部的当前执行上下文,并且一旦函数执行完当前执行上下文后,它将从栈顶部弹出,把控制权返回到当前栈中的下一个上下文。 下面的示例显示了递归函数和程序的执行堆栈: ? ?...创建`arguments object`,检查参数的上下文,初始化名称和值并创建引用副本。 扫描上下文以获取函数声明: 扫描上下文以获取变量声明: 确定上下文中“this”的值。...激活/执行阶段: 在上下文中运行/解释函数代码,并在代码逐行执行时分配变量值。 我们来看一个例子: ? 在调用foo(22)时,创建阶段如下所示: ?
Function code:函数体中的代码 Eval code:eval 函数内执行的文本(实际开发中很少使用,所以见到的情况不多) 在网上你可以读到很多关于作用域的文章,为了便于理解本文的内容,我们将...一旦函数完成执行,当前的执行上下文将从栈的顶部弹出,然后继续执行下面的,下面程序演示了一个递归函数的执行上下文情况。...自己调用自己三次,每次将 i 递增 1,每次函数 foo 被调用的时候,就会创建一个新的执行上下文。一旦当前上下文执行完毕之后,它就会从栈中弹出并转移到下面的上下文中,直到全局上下。...,初始化名称和值,并创建引用副本 扫描上下文中的函数声明 每发现一个函数,就会在 variableObject 中创建一个名称,保存函数的引用 如果名称已经存在,则覆盖引用 扫描上下文中的变量声明 每发现一个变量...,就在 variableObject 中创建一个名称,并初始化值为 undefined 如果变量名已经存在,什么都不做,继续扫描 确定上下文中的 this 指向 4.
Function code:函数体中的代码 Eval code:eval 函数内执行的文本(实际开发中很少使用,所以见到的情况不多) 在网上你可以读到很多关于作用域的文章,为了便于理解本文的内容,我们将...一旦函数完成执行,当前的执行上下文将从栈的顶部弹出,然后继续执行下面的,下面程序演示了一个递归函数的执行上下文情况。...一旦当前上下文执行完毕之后,它就会从栈中弹出并转移到下面的上下文中,直到全局上下。...,初始化名称和值,并创建引用副本 扫描上下文中的函数声明 每发现一个函数,就会在 variableObject中创建一个名称,保存函数的引用 如果名称已经存在,则覆盖引用 扫描上下文中的变量声明 每发现一个变量...,就在 variableObject中创建一个名称,并初始化值为 undefined 如果变量名已经存在,什么都不做,继续扫描 确定上下文中的 this指向 执行代码阶段 在上下文中执行/解释代码,在代码逐行执行时进行变量复赋值
eval[1] eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码 虽然eval()函数有这个功能但是我们还是避而远之,能不用尽量不要用。...eval的执行环境比较混乱,它会查找当前执行的上下文环境从而导致混乱。...4 会把c也输出 Function 取代eval()方法的是new Function 即window.Function,不受上下文作用域的影响 let z = 3; let a = 'var a=...x+y+z} // console.log(fn(1,2)); //NaN //console.log(fn(1,2,3)); //6 vm[2] vm.runInThisContext ()在当前全局上下文中运行代码并返回结果...运行代码不能访问本地范围,但是可以访问当前的全局对象。
在这之前,我们只讨论了当前上下文的变量对象。...乍一看,函数 'foo' 中根本不存在变量 'x',但是正如我们看到的那样,仅仅只是“乍一看”。'foo'上下文的活动对象中只有一个属性 — 属性 'y' 。...❝[[Scope]]是所有父变量对象的层级链,这些父变量对象位于当前函数上下文之上。这个层次连在(函数)创建时候被保存到函数。...因此,在查找上变量的优先级上,上下文中的局部变量比父级上下文中的变量更高,即使是在不同上下文中两个变量名字相同的情况下,第一个找到的也是更深层次上下文中的变量(即更接近局部上下文的那一个)。...全局上下文与eval上下文的作用域链 这或许不太有趣,但是这很重要。全局上下文的作用域链中只包含了全局对象。“eval”类型代码的上下文与调用上下文有相同的作用域链。
Eval code – 在 eval 函数内部执行的文本。 在网上你可以找到很多关于 作用域 的文章, 本文的目的就是让你更加轻松地理解这些概念。...让我们想象术语 执行上下文 就是当前代码的执行环境 / 作用域。 不多说了, 让我们看看一个代码既在 全局 又在 函数 / 局部 上下文中执行的例子。...浏览器永远会执行当前栈中顶部的执行上下文 一旦函数在当前执行上下文执行完毕,它会被从栈的顶部弹出,然后将控制权移交给当前栈的下一个上下文当中。...创建变量对象: 创建 参数对象, 检查参数的上下文, 初始化其名称和值并创建一个引用拷贝。...确定上下文中的 "this" 激活 / 代码执行阶段: 执行 / 在上下文中解释函数代码,并在代码逐行执行时给变量赋值。
上下文总是关键字 this 的值,是调用当前可执行代码的对象的引用。...eval函数的每一次执行,也会进入eval执行中的上下文,判断应该从何处获取变量的值。...栈底总是全局上下文,栈顶是当前(活动的)执行上下文。当在不同的执行上下文间切换(退出的而进入新的执行上下文)的时候,栈会被修改(通过压栈或者退栈的形式)。...浏览器总是执行当前在堆栈顶部的上下文,一旦执行完毕,该上下文就会从堆栈顶部被弹出,然后,进入其下的上下文执行代码。这样,堆栈中的上下文就会被依次执行并且弹出堆栈,直到回到全局的上下文。...它是一个抽象的概念,不同的上下文中,它表示使用不同的object。例如,在global全局上下文中,变量对象也是全局对象自身[global object]。
深入理解执行上下文和执行栈 深入理解变量对象、作用域链和闭包 1.执行上下文 1.1 定义 执行上下文(execution context)是当前 JavaScript 代码被解析和执行时所在环境的抽象概念...eval函数执行上下文 运行在 eval 函数中的代码也获得了自己的执行上下文,eval函数不常用,所以这里不讨论 2.执行栈 执行栈(execution stack),也即调用栈(call stack...当 JavaScript 引擎首次读取脚本时,它会创建一个全局执行上下文并将其push到当前的执行栈。...每当调用函数的时候,都会为该函数创建一个新的执行上下文并将其push到栈顶;在函数执行完毕后,对应的执行上下文将会从栈顶pop出,上下文控制权将移到当前执行栈的下一个执行上下文。...3.1.1.3 this绑定: 全局执行上下文中,this绑定(this binding)到全局对象(对于浏览器,该对象为window);函数执行上下文中,this绑定到谁将取决于函数的调用位置(或者说调用方法
每当 Javascript 代码在运行的时候,它都是在执行上下文中运行。...「Eval 函数执行上下文」 — 执行在 eval 函数内部的代码也会有它属于自己的执行上下文,但由于 JavaScript 开发者并不经常使用 eval,所以在这里我不会讨论它。...当前可执行代码块的调用者(this) 如果当前函数被作为对象方法调用或使用 bind call apply 等 API 进行委托调用,则将当前代码块的调用者信息(this value)存入当前执行上下文...,属性的引用指针将会被覆盖 初始化作用域链 创建 arguments object 检查上下文中的参数,初始化名称和值并创建引用副本 扫描上下文找到所有函数声明: 扫描上下文找到所有var的变量声明:...: 在上下文中运行/解释函数代码,并在代码逐行执行时分配变量值。
但是在逻辑上,我们可以将活动的执行上下文看成一个栈结构。栈底部永远是全局上下文(global context),而顶部就是当前活动的执行上下文。执行到当前代码时,上下文入栈,执行完毕后,上下文出栈。...可执行代码有几种 前面说到当引擎执行到可执行代码的时候,就会将当前上下文压入上下文栈中。那么可执行的代码又分为几种?...,但是却不会退出 只有每次 return 的时候,才会退出当前执行上下文,相应上下文会从栈中弹出,栈指针会自动移动位置。...如果有抛出的异常没有被截获的话,也有可能从一个或多个执行上下文中退出。当所有代码执行完以后,EC 中只会包含全局上下文(global context),当程序退出以后,全局上下文也会退出。...第三种可执行代码 -- eval 代码: eval 函数在调用的时候会产生上下文。
javascript代码在执行时,会进入一个执行上下文中,执行上下文可以理解为当前代码的运行环境。...javascript中运行环境主要包括以下三种情况 > 1 全局环境:代码运行起来首先会进入全局环境 > 2 函数环境:当函数被调用执行时,会进入当前函数中执行代码 > 3 eval函数环境:不建议使用...这意味着具有相同名称的局部变量在作用域链中有更高的优先级。简单的说,每次你试图访问函数执行上下文中的变量时,查找进程总是从自己的变量对象开始。...对象,检查当前上下文中的参数,建立该对象下的属性以及属性值 检查当前上下文中的函数声明: 每找到一个函数声明,就在variableObject下面用函数名建立一个属性,属性值就是指向该函数在内存中的地址的一个引用...检查当前上下文中的变量声明: 每找到一个变量的声明,就在variableObject下,用变量名建立一个属性,属性值为undefined。
领取专属 10元无门槛券
手把手带您无忧上云