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

作用作用

作用作用链 通常来说,一段程序代码中所用到的名字并不总是有效或可用的,而限定这个名字的可用性的代码范围就是这个名字的作用scope。...如果一个变量或者其他表达式不在当前的作用,则将无法使用。作用也可以根据代码层次分层,以便子作用可以访问父作用,通常是指沿着链式的作用链查找,而不能从父作用引用子作用域中的变量和引用。...作用 JavaScript作用为静态作用static scope,也可以称为词法作用lexical scope,其主要特征在于,函数作用域中遇到既不是参数也不是函数内部定义的局部变量时,去函数定义时上下文中查...,也可以称为局部作用 块级作用 代码块内如果存在let或者const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用。...作用、localContext作用、Global作用,总结来说,当需要使用函数或者变量时,如果在当前作用域中没有查到值,就会向上级作用去查,直到查到全局作用,这样一个查找过程形成的链条就叫做作用

1.9K20

java作用-什么是JavaScript作用作用链?

今天我们将通过最简单实际的代码来展示函数作用和全局作用,在下篇文章中,我们将介绍块级作用和暂时性死区。   ...' function foo() { console.log(a) } foo()   执行上面代码时,foo函数在自身的作用并未找到变量a,但是它还是会向外层扩大范围查找...,于是在全局作用找到了变量a,输出bar   继续对代码进行修改,如下    function bar() { var b = 'bar' } function...foo() { console.log(b) } foo()   上面代码,foo和bar两个函数拥有彼此独立的函数作用,所以在foo函数中也无法访问bar函数中定义的变量...b,其作用链中(直到最上层的全局作用域中)也并不存在变量b,所以代码会报错 : b is not   简单来说就是,在执行某个函数时,如果需要取某个变量的值,就会就近首先在函数内查找变量是否声明赋值

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

静态作用和动态作用

静态作用和动态作用 所谓作用规则就是程序解析名字的方法。...当然,采用动态作用规则的语言也会不断向外层作用寻找名字,所以对下面这个表达式求值,无论是采用静态作用规则还是动态作用规则,其结果都是 2: (let ((a 1)) (let ((doubleA...其原因是在采用静态作用规则的时候,对于函数的定义者来说,他可以通过阅读自己的代码很容易地知道他所使用到的变量当前绑定的具体实体是什么,而在使用采用动态作用的语言时,则需要考虑这个函数被调用的时候该变量所对应的具体实体...: 静态类型检查 防止重复绑定 允许嵌套绑定 作用清晰,能和非动态绑定的代码很好地区分 尽可能接近本身的语法 下面就来进行实现。...,而且在绑定结束的时候我们需要手动去将变量解除绑定,这不仅意味着我们在绑定和解绑的时候必须输入完全正确的名字,而且还意味着这段代码不是异常安全的,我们如果在绑定调用和解绑调用之间有未捕获的异常,那么对象的作用栈就会出错

2.1K10

JS作用作用

全局变量的作用是全局性的,即在JavaScript代码中,该全局变量处处都有定义。...下面就要借助JS的作用链来更好的理解作用了。 在此之前,先要明确个概念,即执行环境和作用是两个完全不同的概念。 函数的每次调用都有与之紧密相关的作用和执行环境。...在这个阶段,作用链会被初始化,this的值也会被最终确定。在执行阶段,代码被解释执行。...当代码在一个环境中执行时,会创建变量对象的一个作用链(scope chain)。作用链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。...任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用。 函数作用就好理解了,定义在函数中的参数和变量在函数外部是不可见的。

4.1K30

作用、执行环境、作用

作用,之前有介绍过,JavaScript无块级作用,只有函数作用,简单点说就是JavaScript的作用就是函数作用。因为有函数作用,所以我们有全局作用和局部作用的说法。...JavaScript中最大的全局执行环境是window,执行环境要在所有代码执行完毕才会被销毁,而全局执行环境window只有关闭网页或者关闭浏览器才被销毁。...当代码在一个环境中执行时,会创建变量对象的一个作用链。作用链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。...当fun1执行的时候创建了一个作用链,所以fun1有两个变量对象,一个是自己,一个是全局环境的变量对象window。fun1可以在函数内部访问变量a,因为fun1所在的作用链可以找到变量a。...,作用链中的内部环境可以通过作用链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。

1.5K30

JavaScript作用作用

静态作用 作用 作用规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。 JavaScript 采用词法作用(lexical scoping),也就是静态作用。...因为 JavaScript 采用的是词法作用,函数的作用在函数定义的时候就决定了。 而与词法作用相对的是动态作用,函数的作用是在函数调用的时候才决定的。...总之一句话: 函数的作用在函数定义的时候就决定了 函数会沿着作用链去查找变量。 那么为什么 JavaScript 是静态作用呢?JavaScript 引擎是怎么处理函数的呢?...作用链 具体分析产生 我们分析第一段代码: var scope = "global scope"; function checkscope(){ var scope = "local scope...这样由多个执行上下文的变量对象构成的链表就叫做作用链。 由上可知,作用链是由 变量对象/活动对象 构成的。 活动变量 变量对象是与执行上下文相关的数据作用,存储了在上下文中定义的变量和函数声明。

1.5K40

函数作用和块作用

前言 正如上一章讨论,作用包含了一系列的“气泡”,每一个都可以作为容器,其中包含了标识符(变量、函数)的定义,这些气泡互相嵌套并且整齐地排列成蜂窝型,排列的结构是在写代码时定义的。...实际的结果就是在整个代码片段得到周围创建了一个作用气泡,也就是说这段代码中的任何声明都将绑定在整个新创建的包装函数的作用里,而不是先前所在的作用 为什么隐藏“变量”和“函数”是一个非常有用的技术。...函数作用 在任意代码片段外部添加包装函数,可以将内部的变量和函数定义“隐藏”起来,外部作用无法访问包装函数内部的任何内容。虽然这种技术可以解决一些问题,但是它并不理想,因为会导致一些额外的问题。...首先必须要声明一个具名函数 foo,意味着这个名称本身污染了所在作用。其次,必须显示地通过函数名去调用这个函数才能运行起里面的代码。如果函数可以不需要函数名,且能够自动运行起来那会更理想。...本质上,声明一个函数内部的变量或函数会在所处的作用隐藏起来,这是有意为之的良好软件的设计原则。 但函数不是唯一的作用单元。块作用指的是变量和函数不仅可以属于所处的作用,有可以属于某个代码块。

2.4K20

JavaScript 作用作用

---- 全局作用(Global Scope) 在代码中任何地方都能访问到的对象拥有全局作用,一般来说以下 3 种情形拥有全局作用。...局部作用(Local Scope) 和全局作用相反,局部作用一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用称为函数作用 。 如 1....---- 延长作用链 有些语句可以在作用链的前端临时增加一个变量对象,该变量对象会在代码执行后被移除。有两种情况下会发生这种现象。...---- 代码优化 从作用链的结构可以看出,在运行期上下文的作用链中,标识符所在的位置越深,读写速度就会越慢。...因为全局变量总是存在于运行期上下文作用链的最末端,因此在标识符解析的时候,查找全局变量是最慢的。所以,在编写代码的时候应尽量少使用全局变量,尽可能使用局部变量。

1.7K10

java作用-javaScript预编译、作用作用链详解

ES5中只分为全局作用和函数作用java作用,也就是说for,if,while等语句是不会创建作用的。ES6(let,const)除外。   ...[[scope]]指的就是我们所说的作用,其中存储了前面说的执行期上下文的集合,这个属性是在函数被定义的时候就创建   作用链:[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式链接...,我们把这种链式链接叫做作用链。   ...寻找变量的过程就是从变量作用链开始查找的,如果在当前的变量作用没找到,那么就去上一个变量作用里面去早   作用链创建的过程:   预编译   先来理解一下预编译,看例子:   ...需要注意的时候,函数存储被定义时的上下文的时候java作用,只是存储的是一个引用,而不是副本,正是因为这样,才能形成作用链,当函数在本函数的AO对象找不到的时候,就沿着本函数的[[scope]]存储的上一个作用的变量对象的引用到上一个作用里面去早

1.4K40

全局作用、函数作用、块级作用的理解

1.前言 作用是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期。很惭愧,我今天才深入理解JS的作用..我不配做一个程序员.....开玩笑,什么时候理解都不晚,重要的是理解了以后能不能深深地扎在记忆里,不能,那就写下来 2.块级作用 在一个代码块(括在一对花括号中的一组语句)中定义的所有变量在代码块的外部是不可见的。...没有的时候我们代码也写的好好的,现在新增的概念,我不用不行吗? 来,拋一个典型的问题出来,你就明白块级作用出现的重要性了。...在ES5时代,还没有块级作用这个概念,但是当时也有一种解决方法,那就是.. .. .. .. .....、以及块级作用出现的意义,方便更好的记住。

3K10

四、作用作用

作用作用链本应该是一个非常简单的概念。...我们写代码,应该按照这个规则来。JS引擎对JS源码进行词法分析,也是按照这个规则来。 因此,词法环境,在我们写代码的时候就已经确定了。明白了这一点,对于区分词法环境与执行上下文有非常关键的意义。...词法环境,其实就是作用,有的人叫词法作用等等 得出结论: 一、在JavaScript中,我们可以将作用定义为一套规则,这套规则用来管理JS引擎如何在当前作用以及嵌套的子作用域中根据标识符名称进行变量查找...作用链 首先我们要明确的一点是,作用作用链是不同的。 作用是一套规则。 而作用链则是在代码执行过程中,会动态变化的一条索引路径。...scopeChain[0]为作用链的最前端,而数组的最后一项,为作用链的最末端,所有的最末端都为全局变量对象。

1.5K20

JS基础——作用作用

作用 [[scope]],函数定义时自动生成的一个隐式属性,是用来存储函数作用链 Scope Chain的容器。作用链是用来存储函数执行上下文 AO和全局执行上下文 GO的容器。...函数被定义时,系统会为函数生成[[scope]],[[scope]]中保存该函数的作用链,并从该作用链的起始位置开始存储当前环境的作用链。...{ var b = 2; } var a = 1; b(); } var c = 3; a(); 复制代码...函数a被定义时,会为a生成[[scope]]属性,其中存储a的作用链,并将GO插入到作用链的起始位置。...函数a被执行时,此时函数b也被定义,函数b的[[scope]]也在此时生成,其中存储函数b的作用链,并将当前环境的作用链插入函数b作用链的起始位置,即函数a的AO和GO。

3.5K10

作用

标识符的作用有函数原型作用、局部作用(块作用)、类作用和 命名空间(namespace) 作用 函数原型作用 函数原型作用 函数原型作用 是C++ 程序中最小的作用——函数原型的声明中一定要包含形参的名称和类型说明...,也就是说大括号范围之内,在程序的任何其他地方都不能引用这个标识符——所以它们的作用被称为函数原型作用 局部作用(块作用) 局部作用这里的 局部作用 主要指的是同一个函数体内(可以是主函数也可以是其他自定义的函数...),使用大括号分割的不同代码块——在我们的日常开发过程中,较为常见的就是选择结构和循环结构的局部作用。...int c=b+10; for(int i=0;i<c;i++){//i的作用开始 //循环体 }//i的作用结束 //更多代码 }//c的作用结束...//b的作用结束 }//a的作用结束 已经知道,函数形参的作用,从形参列表开始,到函数体结束之处结束。

86020

作用

1.1 作用概述 通常来说,一段程序代码中所用到的名字(变量名)并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用。...JavaScript(es6前)中的作用有两种: 全局作用 局部作用(函数作用) 1.2 全局作用 作用于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js 文件...1.3 局部作用 作用于函数内的代码环境,就是局部作用。 因为跟函数有关系,所以也称为函数作用。 1.4 JS没有块级作用作用由 { } 包括。...} 即一块作用,其中声明的变量 num,在 “{ }” 之外不能使用; 而与之类似的JavaScript代码,则不会报错: Js中没有块级作用(在ES6之前)es6新增块级作用  if(...,会被初始化;当代码块运行结束后,就会被销毁,因此更节省内存空间 3 - 作用链 只要是代码都一个作用域中,写在函数内部的局部作用,未写在任何函数内部即在全局作用域中; 如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用

61520

作用

作用 public 定义为public的class、interface可以被其他任何类访问: package abc; public class Hello { public void hi...局部变量 在方法内部定义的变量称为局部变量,局部变量作用从变量声明处开始到对应的块结束。方法参数也是局部变量。...: 方法参数name是局部变量,它的作用是整个方法,即①~⑩; 变量s的作用是定义处到方法结束,即②~⑩; 变量len的作用是定义处到方法结束,即③~⑩; 变量p的作用是定义处到if块结束,即⑤...~⑨; 变量i的作用是for循环,即⑥~⑧。...使用局部变量时,应该尽可能把局部变量的作用缩小,尽可能延后声明局部变量。 final Java还提供了一个final修饰符。final与访问权限不冲突,它有很多作用

48120

【JavaScript】作用 ③ ( JavaScript 作用链 | 作用链变量查找机制 )

一、JavaScript 作用链 1、作用 在 JavaScript 中 , 任何代码都有 作用 , 全局作用 : 在 标签中 或者 js 脚本中 定义的变量 属于 全局作用...; 局部作用 : 在 函数中 定义的 变量 属于 局部作用 ; 块作用 : ES6 中 在 {} 代码块 中 使用 let / const 定义的 常量 / 变量 属于 块作用 ; ES6...之前使用 var 关键字在 {} 代码块 中定义的变量 , 取决于 代码块位置 , 代码块在全局作用 则 该变量属于全局作用 , 代码块在 局部作用 则该变量属于 局部作用 ; 2、作用链 如果在...没有该变量 , 则报 " 变量未定义 " 错误 ; 二、代码示例 - 作用链 在下面的代码中 : 首先 , 在 全局作用 中定义 num 变量 , 该变量的 作用 属于 全局作用 ; 然后 ,...全局作用 中的变量 ; 在 out_fun 外部函数 中 , 可以访问 外部函数 / 全局作用 中的变量 ; 在 全局作用 中 , 只能访问 全局作用 中的变量 ; 完整代码示例 : <!

7210

作用

source=cloudtencent 变量作用 一个变量的作用(scope)是程序源代码中定义这个变量的区域。全局变量拥有全局作用,在 JavaScript 代码中的任何地方都是可以访问的。...每一段 JavaScript 代码(全局代码或函数)都有一个与之关联的作用链(scope chain)。这个作用链是一个对象或者链表,这组对象定义了这段代码作用域中的变量。...当前存在三个作用,一个是全局作用,一个作用 a、另外一个是作用 b。...如果作用链上没有任何一个对象含有 x 的属性,那么就会认为这段代码作用链上不存在 x,并最终抛出一个引用错误异常 Uncaught ReferenceError: x is not defined...作用链创建过程 当定义一个函数时,它实际上会保存一个作用链(每个函数都有独立的作用链)。

33010

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券