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

作用声明提升

一.作用 作用是可访问变量的集合,简单来说就是变量的作用范围。在JavaScript中作用分为全局作用和函数作用。 1.全局作用 直接在script标签中编写的代码都运行在全局作用域中。...在全局作用域中创建的变量和函数可以在页面的任意位置访问,在函数作用域中也可以访问到全局作用的变量。 尽量不要在全局中创建变量。...2.函数作用 函数作用是函数执行时创建的作用,每次调用函数都会创建一个新的函数作用。 函数作用在函数执行时创建,在函数执行结束时销毁。 在函数作用域中创建的变量,不能在全局中访问。...通俗地讲就是先上车后补票,先使用,后声明。 1.变量声明提升 在全局作用域中,使用var关键字声明的变量会在所有的代码执行之前被声明,但是不会赋值。...总结 函数声明和变量声明总是会被解释器悄悄地被”提升”到方法体的最顶部。两者区别不大,两者的生命周期略有差异,都取决于它们处于函数作用还是全局作用

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

    作用声明生命

    作用 一段代码中存在变量的可使用范围,超出这个范围,这个变量就不可以被访问了 1.局部变量 在某个函数的内部声明的变量称为局部变量。这些变量只能被申明的函数使用。局部变量在函数外是不能使用的。...#include /* 全局变量声明 */ int g; int main () { /* 局部变量声明 */ int a, b; /* 实际初始化 */...`C  #include / 全局变量声明 / int g = 20; int main () { / 局部变量声明 / int g = 10; printf ("value of...include / 全局变量声明 / int a = 20; int main () { / 在主函数中的局部变量声明 / int a = 10; int b = 20; int...因为我们已经知道栈是怎么样的情况了,就可以更好地理解生命周期了 ### 1.局部变量 通俗地讲局部变量的声明周期从{}结束而消失,{}就表示一个代码块,出了这个块的变量也就超出了作用,生命周期也是会结束

    11710

    JS作用作用

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

    4.1K30

    JS基础——作用作用

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

    3.5K10

    JS进阶:作用作用

    ,变量inVariable在全局作用没有声明,所以在全局作用下取值会报错。...全局作用有个弊端:如果我们写了很多行 JS 代码,变量定义都没有用函数包括,那么它们就全部都在全局作用域中。这样就会 污染全局命名空间, 容易引起命名冲突。...因为放在里面的所有变量,都不会被外泄和暴露,不会污染到外面,不会对其他的库或者 JS 脚本造成影响。这是函数作用的一个体现。...正因为如此, ES6 引入了块级作用,让变量的生命周期更加可控。 3.块级作用 块级作用可通过新增命令let和const声明,所声明的变量在指定块的作用域外无法被访问。...因为 let 不能在同一作用内重复声明一个已有标识符,此处的 let 声明就会抛出错误。但如果在嵌套的作用内使用 let 声明一个同名的新变量,则不会抛出错误。

    2.6K20

    了解 JS 作用作用

    JS中使用的是词法作用(lexical scope) 不在任何函数内声明的变量(函数内省略var的也算全局)称作全局变量(global scope) 在函数内声明的变量具有函数作用(function...JS中的声明提前 js中的函数作用是指在函数内声明的所有变量在函数体内始终是可见的。...并且,变量在声明之前就可以使用了,这种情况就叫做声明提前(hoisting) tip:声明提前是在js引擎预编译时就进行了,在代码被执行之前已经有声明提前的现象产生了 比如 var name="one"...引入一大段话来解释: 每一段js代码(全局代码或函数)都有一个与之关联的作用链(scope chain)。 这个作用链是一个对象列表或者链表,这组对象定义了这段代码中“作用域中”的变量。...作用链举例: 在js最顶层代码中(也就是不包括任何函数定义内的代码),作用链由一个全局对象组成。

    2K10

    js作用详解

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

    2.5K10

    原生JS | 作用

    全局变量 在window环境下声明的变量,或者可以理解为非函数内声明的变量,称为全局变量。全局变量存在于整个JavaScript当中,在任何地方都能被访问和修改。...不同作用的访问关系 在函数内部声明的变量(局部变量),在函数外部并不能访问。在函数外部声明的变量,在函数内部可以访问。 一句话概括:“局部可以访问全局,但全局不能访问局部”。...如果window下也不存在该空间,会在全局作用之下进行空间的创建。 作用链 由于在全局作用当中会包含局部作用,局部作用当中还可以再包含局部作用。...作用案例3 - 不声明局部变量的状态 (function(){ user = '码匠'; }()); console.log(user); 运行结果: '码匠' user = ’码匠‘; 并没有采用...var进行变量的声明,此时在函数这个局部的作用当中,并没有user这个存储空间,之后按照“作用链”向上翻找,也就是在全局(window)作用当中进行查找。

    4.8K50

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

    正文-作用 在 ES5 中,变量的作用只有两类: 全局作用 函数作用 只要不是在函数内部定义的变量,作用都是全局的,全局的变量在哪里都可以被访问到,即使跨 js 文件。...但在 JavaScript 中,变量作用只分函数作用,而且变量有声明提前的特性,所以在函数体内部第一次输出 i 时,此时变量已经提前声明,但还没初始化,所以会是 undefined。...,第二个输出 1 是因为变量作用为函数作用,而不是块级作用。...我们先来看些理论,再结合理论返回来分析这个例子,但只分析变量的声明提前原理,至于作用的原理留着作用链一节分析。...以上,就是变量声明提前的原理,当然,创建执行上下文的过程中,还涉及到其他很多工作,用来实现例如作用链等机制,留待后续来说。

    53820

    js中的作用

    前言 相信自从es6出来之后,你一定多少知道或者已经在项目中实践了部分的块级作用,在函数或者类的内部命名变量已经在使用let了,但是你知道它真正的作用是什么吗?...又是因为什么我们要用这个块级作用,本文与你一起探讨块级作用的场景以及所有细节问题。...es6之前的作用 特点1 :js只有函数级作用以及全局两种 特点2 :不通过var声明的变量直接赋值也可以用并且可以访问,原理是直接赋值到了window对象属性变量下,两者如果同时定义,那么会覆盖使用...,函数内可以访问外部作用,而全局是不可以访问函数作用内的变量或者方法的 var a=b=c=12 function demo(){ var z=13 console.log(b)//12...块级作用 场景一 循环中的块级作用 如果我们有一个遍历循环的绑定事件,并且需要把当前的指针绑定到对应方法中。

    3.2K20

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

    每调用一次函数执行函数体时,js 解释器会经过两个阶段:解析阶段和执行阶段; 调用函数进入解析阶段时主要负责下面的工作: 创建函数上下文 创建变量对象 创建作用链 创建变量对象的过程在作用一节中讲过了...而创建作用链的过程,主要做了两件事: 将当前函数执行上下文的 VO 放到链表头部 将函数的内部属性 [[Scope]] 存储的 VO 链表拼接到 VO 后面 ps:[[]] 表示 js 解释器为对象创建的内部属性...解析阶段会去解析当前上下文的代码,如果碰到是变量声明语句,那么将该变量添加到上下文的 VO 对象中,如果碰到的是函数声明语句,那么会将当前上下文的作用链对象引用赋值给函数的内部属性 [[Scope]]...所以,当进入执行阶段,开始执行全局代码时,全局变量已经全部添加到全局 EC 的 VO 里的,这也就是变量的提前声明行为,而且对于全局 EC 来说,它的作用链就是它的 VO,同时,因为解析过程中遇到了函数声明语句...这里的外层函数,指的是针对于函数声明位置的外层函数,而不是函数调用位置的外层函数。作用链只与函数声明的位置有关系。

    43930

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

    在 ES5 及之前版本,JavaScript 只拥有函数作用,没有块作用(with 和 try...catch 除外)。在 ES6 中,JS 引入了块作用,{ } 内是单独的一个作用。...采用 let 或者 const 声明的变量会挟持所在块的作用,也就是说,这声明关键字会将变量绑定到所在的任意作用域中(通常是 {...} 内部)。 今天,我们就来深入研究一下函数作用和块作用。...函数中的作用 函数作用的含义是指,属于这个函数的任何声明(变量或函数)都可以在这个函数的范围内使用及复用(包括这个函数嵌套内的作用)。...总结来说,作用可以起到两个作用: 私有化变量或函数 规避同名冲突 1.2 函数声明和函数表达式 如果 function 是声明中的第一个词,那么就是一个函数声明,否则就是一个函数表达式。...但是使用 let 进行的声明不会存在作用提升,声明的变量在被运行之前,并不存在。

    1.6K10

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

    在 ES5 及之前版本,JavaScript 只拥有函数作用,没有块作用(with 和 try...catch 除外)。在 ES6 中,JS 引入了块作用,{ } 内是单独的一个作用。...采用 let 或者 const 声明的变量会挟持所在块的作用,也就是说,这声明关键字会将变量绑定到所在的任意作用域中(通常是 {...} 内部)。 今天,我们就来深入研究一下函数作用和块作用。...函数中的作用 函数作用的含义是指,属于这个函数的任何声明(变量或函数)都可以在这个函数的范围内使用及复用(包括这个函数嵌套内的作用)。...总结来说,作用可以起到两个作用: 私有化变量或函数 规避同名冲突 1.2 函数声明和函数表达式 如果 function 是声明中的第一个词,那么就是一个函数声明,否则就是一个函数表达式。...但是使用 let 进行的声明不会存在作用提升,声明的变量在被运行之前,并不存在。

    11910

    初探JavaScript(四)——作用链和声明提前

    正文   截止上一篇关于Javascript的博文《初探JavaScript(三)——JS带我"碰壁"带我飞》已经写了三篇。...今天首先介绍下Javascript的函数作用的概念,然后了解下什么是作用声明提前,最后通过一个例子剖析Javascript的作用链。...如果在函数f()中声明一个局部变量也为g,则全局变量就会被局部变量覆盖 ? 2.作用声明提前   看到Javascript作用这块,可以说颠覆了以前我对作用的认识。...函数作用简言之就是:变量在声明他们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。   ...3.作用链 全局变量在程序中始终是有定义的,局部变量在声明它的函数体内以及其所嵌套的函数内始终是有定义的。

    73150

    js作用作用链和它的一些优化

    作用,就是这套规则下衍生出来的概念。作用我们可以把作用理解为上面讲到的这套规则下的限定范围。作用的职责是,在这段限定范围中根据这套设计好的规则存储所声明的变量,并且提供修改该变量的支持。...在变量的访问权限安全上,作用还承担着保护当前作用内的变量不被外部作用访问的权限保护作用。通过类比,我们可以把作用想象成一个气泡。在这个气泡里所声明的变量成员被包含在其中。...块级作用(Block Scope): 由ECMAScript2015的变量声明标识符let和const引入,在使用这两者进行变量声明时,根据最近的一对花括号{}创建。...作用作用可以嵌套,嵌套在内部的作用可以访问外部的作用声明的变量和函数。通过上面词法环境的介绍,我们大概清楚,作用的这种嵌套关系是通过词法环境的外部词法环境引用outer来关联实现的。...将外部作用变量通过在当前作用声明赋值为局部变量,可以优化后续查找的需要经过的作用链节点个数,得到一定的性能提升。

    1.7K00
    领券