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

【ES基础】let和作用域

本篇文章小编将带着大家一起学习如何使用新的语法声明变量——let。 本篇文章阅读时间预计10分钟。...你将会学到以下内容: let基本介绍 作用域介绍 作用域 全局作用域和函数作用域 块级作用域 var和let的区别 重复定义变量的问题 提升概念的问题 let介绍 ES6引入了let,用let声明变量,...有其它语言背景的比如JAVA,C#开发者来说,这个概念并不难以理解,反而ES6之前,JavaScript没有块级作用域,对于新手而言,使用var声明变量,会让JavaScript不易懂和难以调试,用不好...全局作用域和函数作用域 如何理解全局作用域和函数作用域呢,使用var声明变量时,如果在函数外声明,就是全局变量,任何函数都可以进行使用,这就是全局作用域查找。...如图所示变量寻找路径: 块级作用域.png var和let的比较 对比项 let var 声明变量 √ √ 可以被释放 √ √ 可以被提升 √ 重复定义检查 √ 可被用于块状作用域 √ 重复定义变量问题

84080

【JavaScript】作用域 ② ( JavaScript 块级作用域 | ES6 之前 等同于 全局局部作用域 | ES6 使用 let const 声明变量 常量 有 块级作用域 )

一、JavaScript 块级作用域 1、块级作用域 - ES6 之前 等同于 全局作用域 在 JavaScript 中 , 块级作用域 指的是 在一对大括号 {} 内 声明的变量 只在这对大括号内部可见...; 在 ES6 之前 JavaScript 只有 全局作用域 和 局部作用域 概念 , 没有 块级作用域 概念 , 此时 块级作用域 相当于 全局作用域 或 局部作用域 , 具体 取决于 {} 是在哪个作用域中..., 则 在 if 代码块中 使用 var 声明变量 , 具有 全局作用域 ; 2、块级作用域 - ES6 使用 let / const 声明变量 / 常量 ES6 引入了 let 和 const 关键字..., 这两个关键字 声明的 变量 或 常量 具有块级作用域 ; 在 {} 代码块中 , 使用 let 或 const 声明 变量 或 常量 , 在 代码块 外部无法访问 ; 3、代码示例 - ES6 之前的块级作用域...ES6 引入了 let 和 const 关键字 , 这两个关键字声明的变量具有块级作用域 ; 在下面的代码中 , 变量 num2 是在 if 语句的 块级作用域 中声明 , 因此它只在 if 语句的大括号

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

    理解JavaScript作用域和作用域链

    ​一、JavaScript中的作用域 作用域是当前的执行上下文,值和表达式在其中“可见”或可被访问。如果一个变量或表达式不在当前的作用域中,那么它是不可用的。...function foo() { var x = 'sfa' } console.log(x) // x is not defined 全局作用域和函数作用域 全局作用域:在JavaScript...中 {} 外面的作用域就是全局作用域,里面的变量和函数等其他资源可以在任意地方被访问到。...块级作用域 ES6新增的块级作用域:用let和const声明的变量才存在块级作用域,在该代码块外部访问不到该变量。在{ }中用let和const声明的变量就是一个块级作用域。...{ let a = 1; console.log(a) // 1 } console.log(a) // a is not defined 外部访问不到 二、作用域链 作用域链指的是各个作用域的嵌套关系和查找机制

    41700

    理解javascript作用域和作用域链

    作用域 作用域就是变量和函数的可访问范围,控制着变量和函数的可见性与生命周期,在JavaScript中变量的作用域有全局作用域和局部作用域。    ...全局和局部作用域下面用一张图来解释: ? 单纯的JavaScript作用域还是很好理解的。...作用域链 全局执行环境是最外层的一个执行环境,在web浏览器中全局执行环境是window对象,因此所有全局变量和函数都是作为window对象的属性和放大创建的。...当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain)来保证对执行环境有权访问的变量和函数的有序访问。     用一张图来解释作用域链的运行:由里向外执行。 ?    ...新的作用域链如下图所示: ?    在函数执行过程中,没遇到一个变量,都会经历一次标识符解析过程以决定从哪里获取和存储数据。

    2.1K10

    JavaScript中的作用域和作用域链

    作用域(Scope) 1. 作用域 作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。...ES6 之前 JavaScript 没有块级作用域,只有全局作用域和函数作用域。ES6 的到来,为我们提供了‘块级作用域’,可通过新增命令 let 和 const 来体现。 2....3.函数作用域 函数作用域,是指声明在函数内部的变量,和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部。...正因为如此, ES6 引入了块级作用域,让变量的生命周期更加可控。 4. 块级作用域 块级作用域可通过新增命令 let 和 const 声明,所声明的变量在指定块的作用域外无法被访问。...块级作用域在如下情况被创建: 1.在一个函数内部。 2.在一个代码块(由一对花括号包裹)内部。 let 声明的语法与 var 的语法一致。

    2.2K10

    JavaScript的作用域和块级作用域概念理解

    说到这里我们需要理解两个概念:块级作用域与函数作用域。 函数作用域 这个应该好理解,函数作用域就是说定义在函数中的参数和变量在函数外部是不可见的。 大多数类C语言都拥有块级作用域,JS却没有。...块级作用域 ---- 任何一对花括号中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。...正如我们举的C语言的例子,大多数类C语言都是有块级作用域的,那么在JavaScript又有什么不同呢?...也就是说,JS并不支持块级作用域,它只支持函数作用域,而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是可见的。 那么我们该如何使JS拥有块级作用域呢?...在JS中,为了防止命名冲突,我们应该尽量避免使用全局变量和全局函数。那么,该如何避免呢?

    65920

    JavaScript的作用域和块级作用域概念理解

    作用域 作用域永远都是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期。说到这里我们需要理解两个概念:块级作用域与函数作用域。...函数作用域 这个应该好理解,函数作用域就是说定义在函数中的参数和变量在函数外部是不可见的。 大多数类C语言都拥有块级作用域,JS却没有。...正如我们举的C语言的例子,大多数类C语言都是有块级作用域的,那么在JavaScript又有什么不同呢?...也就是说,JS并不支持块级作用域,它只支持函数作用域,而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是可见的。 那么我们该如何使JS拥有块级作用域呢?...在JS中,为了防止命名冲突,我们应该尽量避免使用全局变量和全局函数。那么,该如何避免呢?

    89650

    JavaScript——作用域和闭包

    本文着重于对 JavaScript 中的作用域和闭包机制进行剖析和说明,闭包本质上也是作用域的一种类型,因为在 JavaScript 里非常重要,所以我们把它在标题里单独列出来。...概述 作用域(Scope),即有效范围,决定了标识符(包括变量、常量、函数名等)在程序中可以被使用的区域。...局部作用域 局部作用域和全局作用域正好相反,局部作用域一般只在某个特定的代码片段内可访问到,JavaScript 中的局部作用域分为函数作用域和代码块作用域两类,其中代码块作用域在 ECMAScript6...代码块作用域 代码块作用域的变量只在声明变量的代码块内部可见。 ECMAScript6 之后,函数内用 let 声明的变量和 const 声明的常量都属于代码块作用域。...ES6 之后支持代码块作用域,如果代码块里存在 let 定义的变量,即会出现作用域延长的现象。

    72410

    JavaScript 函数作用域和块作用域不完全指北

    我们在 JavaScript 词法作用域不完全指北 中介绍了词法作用域,词法作用域是由你写代码时将变量和块作用域写在哪里来决定的,词法分析器处理代码时会保持作用域不变。...那么究竟什么时候才会生成新的作用域呢?最常见的答案是 JavaScript 具有基于函数的作用域,这意味着每声明一个函数都会为其自身创建一个作用域。...感谢块作用域,解救了我们于水火之中。我在前文提到过,在 ES6 支持 let 和 const 之后,IIFE 立即执行函数表达式已经完成了它的历史使命,可以退休了。...换句话说, let 通过 {} 块即可创建新的作用域,无需创建新的函数来创建新的作用域。...const 关键字也遵循块作用域,可以使用它声明块作用域常量。有关 let 和 const 关键字的具体内容,将会在下篇文章中介绍。

    62710

    javascript 变量、作用域和内存问题

    执行环境也就是作用域在很多的编程语言中都是一个很重要的概念,规定了变量或者函数有权访问其他数据的权限,规定了各自的行为。...当代码在一个环境中执行时,会创建变量对象的一个作用域链,作用域链的用途是保证执行环境有权访问的所有变量和函数的有序访问。 函数体内还包含着函数,只有这个函数才可以访问内一层的函数。...而内部函数的变量可以通过作用域链访问外部函数的变量,可以向上搜索作用域链,以查询变量。但是不能反过来。 没有块级作用域 块级作用域表示诸如if等有花括号封闭的代码段块,所以支持条件判断来定义变量。...一般确定某一个变量的时候是通过搜索来确定的,现在本级作用域上找,如果没有,在向上级作用域找,依次类推,故访问局部变量要比访问全局变量的效率更高。...因为不需要向上收索作用域链 3、内存相关  js中也存在垃圾回收机制,我们不需要担心内存的泄露问题,垃圾回收机制会自动的管理内存的分配和无用内存的回收。

    1K80

    详解javascript作用域和闭包

    https://blog.csdn.net/wkyseo/article/details/53636285 参考书籍《你不知道的javascript的上卷》 作用域是什么 现代JavaScript...编译过程中,同样会经过分词/词法分析,解析/语法分析,代码生成三个阶段。 以var a = 2;语句为例,对这一程序语句对处理,需要经过引擎,编译器,作用域三者的配合。...其中,引擎从头到尾负责整个javascript程序的编译和执行过程;编译器负责语法分析和代码生成;作用域负责收集并维护由所有声明的标识符组成的系列查询,并实施一套规则,确定当前执行的代码对这些标识符的访问权限...作用域查找会在找到第一个匹配的标识符时停止 eval和with可以欺骗词法作用域,不推荐使用 函数作用域和块作用域 JavaScript具有基于函数的作用域,属于这个函数的变量都可以在整个函数的范围内使用及复用...如果function是声明中的第一个词,那么就是一个函数声明,否则就是一个函数表达式 with,try/catch具有块作用域,方便好用的实现块级作用域的是es6带来的let关键字 作用域闭包 将内部函数传递到所在词法作用域以外

    66840

    JavaScript之作用域和闭包

    一、作用域 作用域共有两种主要的工作模型:第一种是最为普遍的,被大多数编程语言所采用的词法作用域,另外一种叫作动态作用域; JavaScript所采用的作用域模式是词法作用域。...2.函数作用域和块级作用域 函数作用域: 函数是 JavaScript 中最常见的作用域单元。...通常指 { .. } 内部) ES6前在JavaScript中并不存在块级作用域( 例外:try/catch 结构在 catch 分句中具有块作用域); 在 ES6 中引入了 let 关键字( var...if(..) { let a = 2; } 会声明一个劫持了 if 的 { .. } 块的变量,并且将变量添加到这个块中(另外常量定义const也具有块级作用域)。...3.函数和变量的提升 (1)、提升 函数作用域和块作用域的行为是一样的,即,某个作用域内的变量,都将附属于这个作用域。 引擎会在解释 JavaScript 代码之前首先对其进行编译。

    70610

    《你不知道的JavaScript》:函数作用域和块作用域

    《你不知道的JavaScript》第一部分作用域和闭包第2篇。 昨天讲到作用域,回顾下概念:作用域是一套用来管理引擎如何在当前作用域以及嵌套的子作用域中根据标识符名称进行变量查找的规则。...但在ES6版本开始,有了let和const,终于可以明目张胆的定义块级作用域了,想必用惯了其他语言块级作用域的同学,心里的别扭终于可以舒口气了吧。...你看,在外部作用域访问变量标识符i时,就直接报未定义的语法错误。...至于const也是可以创建块作用域中,不同于let的是,其值是固定的常量,任何对其值的修改都会引起错误。 总结一下 js中的作用域,主要有函数作用域和块级作用域,当然还有全局作用域。...在函数表达式中,还分出了命名函数表达式和匿名函数表达式。 块级作用域的实现,有赖于ES6的版本进步,提供let和const关键字,可以实现同其他语言相同的由{...}包裹起来的块级作用域。

    96830

    JavaScript执行机制:变量提升、作用域链、词法作用域、块级作用域、闭包和this

    这使得JavaScript具有强大的表达能力,但同时也带来了一些复杂性。本文将围绕JavaScript中的变量提升、作用域链、词法作用域、块级作用域、闭包和this进行详细介绍。...一、作用域与变量查找 1.1 作用域链 作用域链是JavaScript中变量查找和访问的基本机制。当访问一个变量时,JavaScript引擎会首先在当前作用域内查找这个变量。...ES6引入了let和const关键字,用于声明块级作用域的变量。这使得JavaScript具有了类似于其他编程语言(如C和Java)的块级作用域。...为了避免这些问题,建议遵循以下最佳实践: 尽量在作用域顶部声明变量和函数,以避免意外的提升行为。 使用let和const代替var声明变量,以避免变量提升和其他var带来的问题。...三、总结 本文介绍了JavaScript中的作用域链、词法作用域、块级作用域、闭包和this。这些概念是理解和掌握JavaScript的基础,对于编写高效、可维护的JavaScript代码非常重要。

    15211

    JavaScript 面试要点:作用域和闭包

    词法作用域就是定义在词法阶段的作用域。换句话说,词法作用域是由你在写代码时将变量和块作用域写在哪里来决定的,因此当词法分析器处理代码时会保持作用域不变(大部分情况下是这样的)。...作用域气泡的结构和互相之间的位置关系给引擎提供了足够的位置信息,引擎用这些信息来查找标识符的位置。 作用域查找会在找到第一个匹配的标识符时停止。...# try / catch 少有人会注意到 JavaScript 的 ES3 规范中规定 try /catch 的 catch 分句会创建一个块作用域,其中声明的变量仅在 catch 内部有效。...换句话说,let 为其声明的变量隐式地了所在的块作用域。...var a = 2;, JavaScript 会将其看成两个声明:var a; 和 a = 2;。第一个声明是在编译阶段进行的,第二个声明会被留在原地等待执行阶段。

    45020

    教你快速了解C语言中的作用域和常量

    章节目录 前言 一、变量作用域和生命周期 作用域 局部变量的作用域 全局变量的作用域 生命周期 局部变量的生命周期 全局变量的生命周期 二、常量 C语言中的常量分为以下以下几种: 1.1 字面常量 1.2...一、变量作用域和生命周期 作用域 作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。...那么局部变量和全局变量的作用域的范围是多少呢? 局部变量的作用域 局部变量的作用域是变量所在的局部范围。 因为局部变量只在他所对应的代码段生效,出了他所在的大括号就销毁。...我们一直在讲变量和常量 那么由变量用const修饰的常变量可以当成常量用吗?...好了今天主要是带大家认识变量和常量 总结一下今天学了: 变量作用域 变量的生命周期 字面常量 const 修饰的常变量 #define 定义的标识符常量 枚举常量 不知道大家掌握了没有

    23110

    JavaScript 基础(五) 函数 变量和作用域

    name:'foo'       }     } 变量作用域   在JavaScript 中,用var 声明的实际上是有作用域的。...局部作用域 由于JavaScript 的变量作用域实际上是函数内部,我们在for 循环等语句块中是无法定义具有无法定义具有局部作用域的变量的。     ...,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量:     function foo(){       var sum = 0;       for(let...i=0; i<100;i++){       sum +=i;     }     i +=1;     } 常量 由于var 和let 声明的变量,如果要声明一个常量,在ES6 之前是不行的...var PI = 3.14;     ES6标准引入了新的关键字const 来定义常量,const 与 let都具有块级作用域;     const PI = 3.14;     PI = 3

    95290

    Go 数据类型篇(一):变量、作用域、常量和枚举

    由于 Go 语言是强类型静态语言,所以变量声明与赋值方式与 PHP/Python/JavaScript 等动态原因相比有很大的区别。...二、变量的作用域 每个变量在程序中都有一定的作用范围,称之为作用域。...在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量也是局部变量。...关于变量的作用域后面我们在介绍到函数、包、流程控制代码块时会通过具体实例来演示,这里先埋根线,知道有这回事即可。...Thursday Friday Saturday numberOfDays ) 四、常量的作用域 和函数体外声明的变量一样,以大写字母开头的常量在包外可见(类似于

    77510
    领券