首页 > 其他分享 >let var const 的区别

let var const 的区别

时间:2023-04-30 22:44:57浏览次数:39  
标签:const 变量 let var 报错 声明

首先要明确变量的初始化就是给变量赋一个初值

前言:

1.let 和 const 是es6 新出来的语法

2.由此可见,let 和var声明的变量值可以修改,而const不可以修改

3.由此可见,const声明的常量必须初始化,否则会报错(翻译过来就是:常量声明中缺少初始值设定项)。如果你要声明一个常量,必须要赋初值。否则就会报错。 

4.由此可见,let和var未初始化的变量不会报错,但是输出为undefined,而const依然会报语法错误。

综上,const几乎和let差不多,唯一的区别是const声明的是常量,即一但赋值,值就不可以改变,否则会报错。它同样具有的是块级作用域。

二. 暂时性死区

定义:在es6中,暂时性死区是一个语法错误,是指let和const命令使区块形成封闭的作用域,使用let和const命令声明变量之前,该变量都是不可用的,es6给这种错误设定了一个专有名词叫暂时性死区。

由此可见,在let和const声明之前就使用变量是会报错的----ReferenceError(引用错误),然而var定义的变量却可以提前使用,可以提前赋值。

综上,const几乎和let差不多,唯一的区别是const声明的是常量,即一但赋值,值就不可以改变,否则会报错。它同样具有的是块级作用域。

三. 变量提升

使用var 声明变量时变量会提升,let和const不会。上图的undefined相当于-------var mm; console.log(mm); mm = 3;

拓展:

这样是不会报错的,结果是1,2,1

(1)不管是var,let,const,相互之间只要是已经声明过的变量名,不管有没有被赋值,都不能重复定义一个同名的,此时报的错误是-----SyntaxError(语法错误)。

(2)const声明的变量,无法修改值,此时会报的错误是------TypeError(类型错误)。

这个就是会报错,重复声明的问题。

输出结果是2,3,所以var可以声明重复变量,另外var声明的变量是函数作用域,而let声明的时块级作用域

标签:const,变量,let,var,报错,声明
From: https://www.cnblogs.com/131362wsc/p/17365893.html

相关文章

  • 《asyncio 系列》4. 如何并发运行多个任务(asyncio.gather、asyncio.as_completed、asy
    楔子在上一篇文章中,我们了解了套接字的内部工作原理,并构建了一个基本的回显服务器。现在我们将学到的知识应用到并发的、非阻塞的Web请求中,基于asyncio可以并发发送大量的Web请求,缩短应用程序的运行时间。当我们必须向一组RESTAPI发出多个请求时,这很有用,比如在微服务架......
  • c语言报错 [Error] invalid initialization of non-const reference of type 'LinkQue
     进行地址传递是出现报错临时值不能作为非常量引用参数进行传递所以需要在main函数中·重新定义指针传递 ......
  • cpp future,get,sleep_for,third variable
    #include<chrono>#include<condition_variable>#include<ctime>#include<fstream>#include<future>#include<iomanip>#include<iostream>#include<map>#include<mutex>#include<random>#inc......
  • open3d Reconstruction system 问题解决
    1.https://github.com/luckyluckydadada/Azure-Kinect-DK-3D-reconstruction 2.open3d版本:0.14.10.16.00.17.0会报错:open3d.cuda.pybind.piplines.odommetry.OdomtryOptionbojecthasnoattribute'max_depth_diff' 3.结果问题一:    根据......
  • 天池编程大赛周赛-Character deletion 题解
    题目描述EntertwostringsanddeleteallcharactersinthesecondstringfromthefirststringStringcontainsspaces$1\leqlen(str),len(sub)\leq10^5$示例示例1:Input:str=”Theyarestudents”,sub=”aeiou”Output:”Thyrstdnts”来源:九章算法链接:ht......
  • session.save_path is correct (/var/lib/php/session) in Unknown on line 0
    session.save_pathiscorrect(/var/lib/php/session)inUnknownonline0 解决办法:方法1、注释掉/etc/php.ini中session.save_path=“/var/lib/php/session”方法2、查看apache用户和组,然后将该用户加到session文件夹所处的组中。方法3,在session_start()前不要有任何输出!......
  • C++中关于默认构造函数(Default Constructor)
    读<<深度探索C++对象模型>>,第二章介绍了默认构造函数,自觉知识点虽基础但是很是被忽略,故作此文记录.关于基础概念不做介绍,先看代码#include<stdio.h>#include<string>classSample{public:intintVal;};classFoo{public:Foo(inta=1000):int......
  • Unknown run configuration type SpringBootApplicationConfigurationType;Servlet Ser
    UnknownrunconfigurationtypeSpringBootApplicationConfigurationType社区版的idea自己安装插件,去配置大家可分享关于Java微服务相关知识,包括但不限于Java微服务开发经验、架构组成、技术交流、中间件等内容,我们鼓励springcloud架构为基础发散出击,从而达到技术积累的目的,快来沉......
  • [ MySQL开发高频面试]VARCHAR(50)中的50到底是能存50个字还是50个字节?
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"!作者:李辉|慕课网讲师了解MySQL的数据类型是开发人员在使用MySQL数据库的时候,必备的基础技能之一。也正因为此,这部分知识也是面试官面试的时候屡屡提及的高频问题,所以尽量不要在这个地方栽跟头。今天......
  • const和constexpr
    inta=10;constint&b=a;a=20;std::cout<<b<<std::endl;//输出为20,表示虽然b用const修饰不能直接修改b但是可以通过修改b的引用a来修改binta1=10;constexprint&b1=a1;//这样写会提示错误c++11使用的constexpr更加强调常量,而之......