首页 > 其他分享 >了解 ES6 中 var、let 和 const 的范围

了解 ES6 中 var、let 和 const 的范围

时间:2022-09-07 00:57:19浏览次数:88  
标签:ES6 const 变量 let log 控制台 年龄 范围

了解 ES6 中 var、let 和 const 的范围

了解 ES6 中的全局、本地和块级作用域

发病前 ES2015(ES6) , 这 曾是 statement 是在 JavaScript 中声明变量的唯一选项。然而,由于 常量 在 ES6 中添加,这已经改变,并且 曾是 现在很少使用了。此外,使用还有一些好处 常量 超过 曾是 我们将在这篇文章中通过检查它们在范围方面的区别来进行介绍。

范围

范围只是指使用这些变量的区域。在 ES6 之前,只有两个作用域: 全局和局部/功能范围 .然而, 块范围 ,这是范围 常量 现在可以在 ES6 中使用。让我们用一个例子来进一步理解这三个作用域。

全球范围

变量的范围被称为 全球的 如果 曾是 变量被声明 在函数之外 .

**变量年龄 = 28;** 功能问候(){  
 var message = “你好”;  
 控制台.log(消息); // 你好  
 } **控制台.log(年龄); // 28**

这里, 年龄全球 作用域是因为它是在函数外部声明和定义的,因此可以从整个窗口中的任何位置访问。

本地/功能范围

一个 曾是 变量有 功能范围 如果它是在函数内部定义的。

 变量年龄 = 28; 功能问候(){  
  **var message = “你好”;**  
 控制台.log(消息); // 你好  
 } **控制台.log(消息); // ReferenceError: 消息未定义**

在上面的代码中,如果我们尝试访问 信息 变量外 迎接 函数然后是 参考误差 被退回。这是因为变量的范围仅限于定义它的函数。因此,它不能从函数外部访问。虽然,在函数中,它确实打印了消息 功能范围 .

块范围

块是由 {} 分隔的一段代码,代码所在的位置。

**让年龄= 28;** 如果真实) {  
  **让年龄= 30;**  
  **让消息=“你好”;**  
 控制台.log(年龄); // 30  
 } 控制台.log(年龄); // 28  
 控制台.log(消息); // ReferenceError: 消息未定义

在 ES6 中, 常量 两者都有 块级作用域 .在上面的例子中,我们有两个 声明的变量 一样的名字 IE 年龄, 内部和外部 如果 堵塞。

什么时候我们 控制台日志 同样,我们看到两者都打印不同的值。这是因为两者都有自己的 块范围 .

此外,该 信息 内部声明的变量 如果 堵塞 不能在块外访问 并返回错误。这表明该范围 信息 变量是 限制在 **如果** 仅块,它是块级范围 .当我们声明一个 或者 常量 函数内部或作为函数一部分的代码块内部的变量。

“var”的问题

一个问题 我们看到的 曾是 .你能在下面的代码中识别它吗?

**变量年龄 = 28;** 如果真实) {  
  **变量年龄 = 30;**  
 控制台.log(年龄); // 30  
 } 控制台.log(年龄); // 30

如果我们查看上面的示例,它与我们使用的代码相同 我们的变量 块范围 例子。但是,这里的输出是不同的,因为两者 控制台日志 印刷 30 代替 28 & 30 不像 变量。

这是我们看到的主要问题之一 曾是 在哪里 覆盖 下一个 曾是 用 声明的变量 一样的名字 在不属于函数的块内。 这是因为 **曾是** 在不属于函数的块内声明的变量将获得全局范围 .

因此,在 ES6 之后,使用 曾是 大部分被避免,并且 常量 被使用。虽然, 曾是 ES6 仍然支持不支持最新 ES6 功能的旧代码和浏览器。

感谢您的阅读。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/20720/39100700

标签:ES6,const,变量,let,log,控制台,年龄,范围
From: https://www.cnblogs.com/amboke/p/16663867.html

相关文章

  • new Set()的基础用法(ES6)
    1、什么是Set()Set是es6新增的数据结构,似于数组,但它的一大特性就是所有元素都是唯一的,没有重复的值,我们一般称为集合。Set本身是一个构造函数,用来生成Set数据结构2、......
  • Java Servlet 入门: 问题系列:No compiler is provided in this environment. Perhaps y
    问题:用Maven编绎运行时,如果系统引用的JRE运行库,而不是JDK开发运行库,则会抛异常。 解决:在eclipse的菜单中,进入Window>Preferences>Java>InstalledJREs->Add......
  • 学习现代 JavaScript (ES6+) 的基础知识
    学习现代JavaScript(ES6+)的基础知识您应该在代码中开始使用的10个现代功能您可能已经知道JavaScript是一种功能丰富的编程语言,每次更新都会不断增强。有很多事......
  • postgresql/lightdb中分区的Constraint Exclusion详解
    在postgresql10支持声明式分区之前,分区是通过继承实现的,如下:CREATETABLEmeasurement(city_idintnotnull,logdatedatenotnull,......
  • 开源:Taurus.MVC-Java 版本框架 (支持javax.servlet.*和jakarta.servlet.*双系列,内集成
    版本说明:因为之前有了Taurus.MVC-DotNet版本框架,因此框架标了-Java后缀。.Net 版本:开源文章:开源:Taurus.MVC-DotNet版本框架(支持.NETCore系列,内集成微服务服务端......
  • es6中箭头函数
    箭头函数相当于匿名函数,简化了函数定义。 箭头函数有两种写法,当函数体是单条语句的时候可以省略{}和return。另一种是包含多条语句,不可以省略{}和return。 特点箭......
  • js判断变量数据类型typeof、instanceof、Object.prototype.toString.call()、 constru
    JavaScript有4种方法判断变量的类型,分别是typeof、instanceof、Object.prototype.toString.call()(对象原型链判断方法)、constructor(用于引用数据类型) typeof:常用于......
  • letcode算法--10.三数之和
    给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。请你返回所有......
  • Singleton_单例模式:
    Singleton_单例模式:常规实现: publicclassSingleton{ privateSingleton(){ } privatefinalstaticSingletonINSTANCE=newSingleton(); publicstaticSingl......
  • let,var,const的区别
    js中let,var,const的区别(1)块级作用域:块级作用域由{}包括,let和const具有块级作用域,var不存在块级作用域(2)变量提升:var存在变量提升,let和const不存在变量提升,即在变......