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

JS执行上下文作用

一、JS执行上下文 执行上下文就是当前 JavaScript 代码被解析执行时所在环境的抽象概念, JavaScript 中运行任何的代码都是在执行上下文中运行。...(3)确定this的值,即 ResolveThisBinding 二、作用 作用就是变量函数的可访问范围,控制这个变量或者函数可访问行生命周期。   ...作用有两种工作模型:词法作用动态作用JS采用的是词法作用工作模型,词法作用意味着作用是由书写代码时变量函数声明的位置决定的。...( with  eval 能够修改词法作用,但是不推荐使用,对此不做特别说明)   在 js 中是词法作用,意思就是你的变量函数的作用是由你的编码中的位置决定的,当然可以通过 apply、call...在 ES6 之前,js 中的作用分为两种:函数作用全局作用,现在作用分为:全局作用、函数作用、块级作用

63010

JS作用作用

JS中的作用就是在一定的空间范围内对数据进行读写操作。 在JS中一个变量的作用(scope)是程序中定义这个变量的区域。 变量有全局变量和局部变量两种。...下面就要借助JS作用链来更好的理解作用了。 在此之前,先要明确个概念,即执行环境作用是两个完全不同的概念。 函数的每次调用都有与之紧密相关的作用执行环境。...搜索过程始终从作用链的前端开始,然后逐级地向后(全局执行环境)回溯,直到找到标识符为止。 此外还要讲下JS作用域中的块级作用JS中是没有块级作用这个概念的。 什么是块级作用呢?...但JS由于没有块级作用,所以在块外仍旧可以访问。...JS并不支持块级作用,它只支持函数作用,而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是可见的。 那么JS又该怎么拥有块级作用呢?

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

JS进阶:作用作用

作用(Scope) 1.什么是作用 作用是在运行时代码中的某些特定部分中变量,函数对象的可访问性。换句话说,作用决定了代码区块中变量其他资源的可见性。...ES6 之前 JavaScript 没有块级作用,只有全局作用函数作用。ES6的到来,为我们提供了‘块级作用’,可通过新增命令letconst来体现。...因为放在里面的所有变量,都不会被外泄暴露,不会污染到外面,不会对其他的库或者 JS 脚本造成影响。这是函数作用的一个体现。...取a的值时,试图在fn作用取,但是取不到,只能转向创建fn的那个作用域中去查找,结果找到了,所以最后的结果是30 作用与执行上下文 许多开发人员经常混淆作用执行上下文的概念,误认为它们是相同的概念...作用执行上下文之间最大的区别是:执行上下文在运行时确定,随时可能改变;作用在定义时就确定,并且不会改变。 一个作用下可能包含若干个上下文环境。

2.5K20

JS执行上下文作用闭包

一、执行上下文 单线程 同步执行,只有栈顶的上下文处于执行中,其他上下文需要等待 全局上下文只有唯一的一个,它在浏览器关闭时出栈 函数的执行上下文的个数没有限制 每次某个函数被调用,就会有个新的执行上下文为其创建...---- 二、作用 1、变量作用 全局变量:在全局声明的变量,任何地方都可以访问 局部变量:在函数里声明的变量,只有函数里内访问 ——几个注意点: 1)声明局部变量必须用var,不然会污染全局变量...—— return 2、函数作用 js没有块级作用,而有函数作用。 函数作用是指:在函数内声明的所有变量在函数体内是始终可见的。...---- 三、闭包 什么是闭包 参考:学习Javascript闭包(Closure)——阮一峰 有权访问另一个函数作用域中的变量的函数 定义在一个函数内部的函数   function f1(){     ...function f2(){       alert(n);     }     return f2;   }   var result=f1();   result(); // 999 f2()就是闭包 闭包的作用

1.2K30

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

一、作用 在 JavaScript 中, 作用(scope,或译有效范围)就是变量函数的可访问范围,即作用控制着变量函数的可见性生命周期 二、全局/局部作用 2.1 全局作用(Global...6.3 letconst (1)为了解决块级作用,ES6引入了 let const 关键字,可以声明一个块级作用的变量。 ? (2)全局作用的生存周期与上述应用相同。...局部作用只在该函数调用执行期间存在。 七、上下文 vs 作用 (1)首先需要说明的是上下文作用是不同的概念。 (2)每个函数调用都有与之相关的作用上下文。...从根本上说,作用是基于函数,而上下文是基于对象。 (3)作用每次函数调用时变量的访问有关,并且每次调用都是独立的。上下文总是关键字 this 的值,是调用当前可执行代码的对象的引用。...如果在自己的变量对象中没发现要查找的变量,继续搜索作用链。他将攀爬作用链检查每一个执行上下文的变量对象,去寻找变量名称匹配的值。

1.6K21

JS学习系列 03 - 函数作用作用

在 ES5 及之前版本,JavaScript 只拥有函数作用,没有块作用(with try...catch 除外)。在 ES6 中,JS 引入了块作用,{ } 内是单独的一个作用。...采用 let 或者 const 声明的变量会挟持所在块的作用,也就是说,这声明关键字会将变量绑定到所在的任意作用域中(通常是 {...} 内部)。 今天,我们就来深入研究一下函数作用作用。...由于标识符 a、b、c bar都属于函数 foo 的作用,所以在全局作用域中访问会报错,因为它们都没有定义,但是在函数 foo 内部,这些标识符都是可以访问的,这就是函数作用。...块作用 ES5 及以前 JavaScript 中具有块作用的只有 with try...catch 语句,在 ES6 及以后的版本添加了具有块作用的变量标识符 let const 。...总结 函数是 JavaScript 中最常见的作用单元。块作用指的是变量函数不仅可以属于所处的函数作用,也可以属于某个代码块。

1.6K10

JS学习系列 03 - 函数作用作用

在 ES5 及之前版本,JavaScript 只拥有函数作用,没有块作用(with try...catch 除外)。在 ES6 中,JS 引入了块作用,{ } 内是单独的一个作用。...采用 let 或者 const 声明的变量会挟持所在块的作用,也就是说,这声明关键字会将变量绑定到所在的任意作用域中(通常是 {...} 内部)。 今天,我们就来深入研究一下函数作用作用。...由于标识符 a、b、c bar都属于函数 foo 的作用,所以在全局作用域中访问会报错,因为它们都没有定义,但是在函数 foo 内部,这些标识符都是可以访问的,这就是函数作用。...块作用 ES5 及以前 JavaScript 中具有块作用的只有 with try...catch 语句,在 ES6 及以后的版本添加了具有块作用的变量标识符 let const 。...总结 函数是 JavaScript 中最常见的作用单元。块作用指的是变量函数不仅可以属于所处的函数作用,也可以属于某个代码块。

9310

JS基础——作用作用

作用 [[scope]],函数定义时自动生成的一个隐式属性,是用来存储函数作用链 Scope Chain的容器。作用链是用来存储函数执行上下文 AO全局执行上下文 GO的容器。...函数被定义时,系统会为函数生成[[scope]],[[scope]]中保存该函数的作用链,并从该作用链的起始位置开始存储当前环境的作用链。...函数被定义后&将要执行前会生成函数本身的AO,并将其插入作用链的起始位置。...,并将GO插入到作用链的起始位置。...函数a被执行时,此时函数b也被定义,函数b的[[scope]]也在此时生成,其中存储函数b的作用链,并将当前环境的作用链插入函数b作用链的起始位置,即函数a的AOGO。

3.5K10

【JavaScript】执行上下文作用作用

整个过程中,解析器会创建和管理上下文,包括全局执行上下文函数执行上下文等。执行上下文是一个包含执行时所需信息的数据结构,包括变量对象、作用链、this指针等。...在这个过程中,执行上下文被创建并与当前的函数调用相关联,包括变量、函数、参数this指针、作用链等信息。当函数执行完毕后,执行上下文将被销毁。...使用letconst的顶级声明不会定义在全局上下文中,但是在作用链解析上效果是一样的。...当代码执行流入函数时,函数的上下文会被推到一个上下文栈上(js的执行流是在栈空间进行的),在函数执行完毕之后,上下文栈会弹出该函数上下文,将控制权返回给之前的上下文,ECMAScript程序的执行流就是通过这个上下文栈进行控制的...作用上下文中的代码在执行的时候,会创建上下文对象的一个作用链。这个作用链决定了各级上下文中代码在访问变量函数时的顺序。

64020

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

作用链:很容易与作用弄混。作用链其实是在进入执行上下文以后创建的。是由当前的活动对象当前函数的[[scope]]属性拼接而成。如果在全局执行上下文,则当前作用链仅有全局变量对象。...当然,在此阶段,完成了全局作用的变量声明函数声明,并且进行了全局作用的变量提升函数提升。...参考 JS入门难点解析3-作用 JS入门难点解析4-执行上下文JS入门难点解析5-变量对象 JS入门难点解析6-作用JS入门难点解析7-this 一道js面试题引发的思考 JavaScript...深入之执行上下文 深入理解javascript作用系列第五篇——一张图理解执行环境作用 前端基础进阶(二):执行上下文详细图解 Javascript变量的作用作用链详解 JavaScript...关于作用作用闭包的理解 理解js中的作用,作用链以及初探闭包

65210

执行上下文作用

2.函数执行上下文 3.eval执行上下文 三、三个属性 1.变量对象,每个上下文都有一个变量对象,这个上下文内定义的所有变量函数都存在这个对象上,但是无法通过代码访问这个变量对象,但在后台会用到它。...2.作用链,在执行上下文代码执行的时候,创建作用链,作用链决定执行上下文代码在访问变量函数的顺序,权利。...六、变量声明 1.var:函数作用,声明会被拿到函数或作用顶部,这个现象叫提升(hoisting) 2.let:块级作用即为{声明内},if,while,function都是块,它不能在同一作用声明多次...,必须确定标识符是什么,搜索开始与作用链最前端,如果没有找到变量名,继续沿着作用链搜索。...(作用链中对象可能原型链,因此搜索可能涉及原型链),最后一直搜索到作用链底部(全局上下文) let name = 'a' function getName(){ let name = 'b' {

26620

了解 JS 作用作用

JS中使用的是词法作用(lexical scope) 不在任何函数内声明的变量(函数内省略var的也算全局)称作全局变量(global scope) 在函数内声明的变量具有函数作用(function...,就是说函数是一个作用的基本单位,js不像c/c++那样具有块级作用 比如 if  for 等 function test(){ for(var i=0;i<10;i++){ if(i=...JS中的声明提前 js中的函数作用是指在函数内声明的所有变量在函数体内始终是可见的。...引入一大段话来解释: 每一段js代码(全局代码或函数)都有一个与之关联的作用链(scope chain)。 这个作用链是一个对象列表或者链表,这组对象定义了这段代码中“作用域中”的变量。...作用链举例: 在js最顶层代码中(也就是不包括任何函数定义内的代码),作用链由一个全局对象组成。

2K10

深入理解JS作用链与执行上下文

执行上下文:执行上下文,又称为执行环境(execution context),听起来很厉害对不对,其实没那么难。图片作用链:其实,我们知道,JS 用的是 词法作用 的。...当 需要调用 testValue 变量时;先找本身作用,没有,JS 引擎会顺着 作用链 向下寻找 0 => 1 => 2 => ...。...作用链,是在 JS 引擎 完成 初始化执行上下文环境,已经确定了,这跟我们 变量提升 小节讲述得一样。它保证着 JS 内部能正常查询 我们需要的变量!。我的一点疑惑注意:在这里,我无法证明一个问题。...全局执行上下文初始化完毕之后,它是把所有的函数作用链确定。还是,初始化一个执行上下文,将本作用的函数作用链确定。...JS 引擎查找变量时会耗费多少时间?所以,这个故事告诉我们,尽量将 全局变量局部化 ,避免,作用链的层层嵌套,所带来的性能问题。理解 执行上下文:将这段代码,放置于全局作用之下。

44340

js函数、作用闭包

正确的写法是(function (a,b){return a+b ;})(), ()内部的东西是一个值,加上()代表立刻执行,整个语句相当于一个函数类型的值需要立刻执行 7、命名冲突 当在同一个作用内定义了名字相同的变量方法的话...1、定义 作用(scope)指的是变量存在的范围。...2、分类: 在 ES5 的规范中,Javascript 只有两种作用: 一种是全局作用,变量在整个程序中一直存在,所有地方都可以读取; 另一种是函数作用,变量只在函数内部存在。...4、作用规则 {}不产生一个作用,定义函数才会产生一个函数作用 函数在执行的过程中,先从自己内部找变量 如果找不到,再从创建当前函数所在的作用去找, 以此往上 var a = 1 function...由于for循环不会产生一个作用,所以可以不用return。

1.4K20

js作用详解

atest其实是一个window对象下的方法对象 var 局部变量作用 var 声明一个对象,只作用当前作用以下。...变量作用覆盖问题 通过var 关键字我们知道,当声明一个变量时,该变量可以被当前作用,以及下层作用访问 当下层作用存在同名变量时,下层变量将覆盖上层变量:     var a=...同时,在子作用声明的方法,只能在当前作用或者下层作用调用 闭包函数,闭包作用 闭包函数,又称匿名函数,例如:     (function () {         var a...在闭包函数中声明的变量,只能在闭包函数内的作用,以及下层作用使用,可通过return 对象中,通过return对象中声明的方法进行返回,使得上级作用能成功访问到闭包作用的变量 return作用变量访问情况...2:js作用是往下通用的,下层作用可访问上层作用的变量,并可修改值 3:js下层作用变量上层同名冲突时,下层作用将覆盖上层变量,但上层作用的访问不受影响 4:不适用var方法定义的变量,

2.4K10

原生JS | 作用

HTML5学堂-码匠:作用那些必须掌握的知识,还有大量作用案例练习与分析,快快进来! 作用的基础知识 在JavaScript中,每个变量会有一个有效区域(范围),这个就是作用。...全局变量存在于整个JavaScript当中,在任何地方都能被访问修改。 局部变量 常见的局部变量有以下两种: ● 在函数内声明的变量(使用var); ● 函数参数(形参)。...局部变量存在于函数体内,它们的值只能在函数体内访问修改。 不同作用的访问关系 在函数内部声明的变量(局部变量),在函数外部并不能访问。在函数外部声明的变量,在函数内部可以访问。...如果window下也不存在该空间,会在全局作用之下进行空间的创建。 作用链 由于在全局作用当中会包含局部作用,局部作用当中还可以再包含局部作用。...当有多层作用时,深层的作用域中查找变量时,会按照“当前作用”到“上层作用”再到“全局作用”的顺序进行查找,这个查找的顺序就可以理解为作用链。

4.7K50

深入理解JS作用链与执行上下文3

执行上下文:执行上下文,又称为执行环境(execution context),听起来很厉害对不对,其实没那么难。图片作用链:其实,我们知道,JS 用的是 词法作用 的。...当 需要调用 testValue 变量时;先找本身作用,没有,JS 引擎会顺着 作用链 向下寻找 0 => 1 => 2 => ...。...作用链,是在 JS 引擎 完成 初始化执行上下文环境,已经确定了,这跟我们 变量提升 小节讲述得一样。它保证着 JS 内部能正常查询 我们需要的变量!。我的一点疑惑注意:在这里,我无法证明一个问题。...全局执行上下文初始化完毕之后,它是把所有的函数作用链确定。还是,初始化一个执行上下文,将本作用的函数作用链确定。...JS 引擎查找变量时会耗费多少时间?所以,这个故事告诉我们,尽量将 全局变量局部化 ,避免,作用链的层层嵌套,所带来的性能问题。理解 执行上下文:将这段代码,放置于全局作用之下。

47920

静态作用动态作用

静态作用动态作用 所谓作用规则就是程序解析名字的方法。...当然,采用动态作用规则的语言也会不断向外层作用寻找名字,所以对下面这个表达式求值,无论是采用静态作用规则还是动态作用规则,其结果都是 2: (let ((a 1)) (let ((doubleA...分别实现两种作用 下面要谈到的是对于一个解释器来说,这两种作用应该分别怎么实现 2,当然,刚刚也说了,动态作用其实没什么好处,这么做其实纯粹是为了好玩。...bindings) body env scope = do val <- eval' expr env evalLet bindings body env ((name, val):scope) 对于静态动态作用而言...通过这个方式,我们就可以实现静态作用了。当我们在当前作用域中找不到一个变量的绑定时,我们就会在捕获到的环境中向外查找,直到找到或是没有更外层的作用为止。

2K10
领券