let与const命令都是用来在js中声明变量的,在使用上与var相似,但存在一些区别,下面先讲let同var的区别

let

怎么使用呢,同var一样,let  变量名   就可以声明了

区别一:其作用域只能在当前执行的代码块中,

{
let a=12;
var b=12;
console.log(a+"=="+b);//a==>12 b==>12
}
console.log(a);// ReferenceError: a is not defined
console.log(b);//

上面的例子中,let在代码块中声明后,在代码块外引用就会报错,其作用范围只限制在{ }里面,有点跟函数的局部变量相似

我们可以发现这种做法挺适用于for循环中,这样子可以做到在循环中的i不会被后面的代码引用到

for(var i=0;i<6;i++);
console.log(i);//
for(let j=0;j<6;j++);
console.log(j);//Uncaught ReferenceError: j is not defined

区别二:不能在同一个作用域内重复声明一个变量

我们知道用var声明变量的时候可以重复声明,只是会改变数据存储的指向,最直观的例子就是for循环的时候习惯性重复用var i 吧

但是let不允许重复声明,下面代码运行时会报错

//报错
{
var a=12;
let a=1;
}

区别三:let声明的变量不会进行预编译,即将变量的声明提前至代码前面

console.log(a);//undefined
var a=2; {
console.log(b);//报错
let b=2;
}

区别四:暂时性死区(TDZ),let变量声明的代码块中,其同名的全局变量(代码块外声明的var)不会产生任何作用(简单说就是被无视掉了)

{
var a=12;
let a=11;
console.log(a);//报错,因为在用let声明时,已经声明了标识符a
} var b=12;
{
let b=11;
console.log(b);//
} {
tmp = 1; // 报错
console.log(tmp); // 报错 let tmp;
console.log(tmp); // 报错
tmp = 1;
console.log(tmp); //
}

const

const用来声明一个只读的变量,声明后变量不能改变

下面开始一一说明:

首先const声明时必须初始化,且声明后不能重新赋值,否则都会报错

const a;//报错,未初始化

const b=1;
b=2;//报错,重复赋值

其次,const与let在下面方面有相似之处:

const的作用域同样作用于声明的代码块中

{
const c=1;
}
console.log(c);//报错,为声明定义

const在同一个作用域中不能重复声明

var message = "Hello!";
let age = 25; // 以下两行都会报错
const message = "Goodbye!";
const age = 30;

const不会进行预编译(声明的变量提前)

{
console.log(d);//报错
const d=1;
}

const同样存在暂时性死区

var  a=12;
{
const a= 1;
console.log(a);//1

}

接下来对其变量值声明后不能改变补充说明:这里的不能改变指的是变量指向的地址不会发生改变

所以对于用const声明的数组和对象,可以向其添加元素或者属性,因为这些操作不会改变其本来变量指向的地址,但是重新赋值一个数组或者对象无论是啥都会报错

const obj={};
obj.pro=1;//可以成功添加
console.log(obj.pro);//
obj={};//报错 const arr=[];
arr.push(1);
console.log(arr);//[1]
arr=['df'];//报错

ECAMScript中的let和const的更多相关文章

  1. 在php中定义常量时,const与define的区别?

    问]在php中定义常量时,const与define的区别?  [答]使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时要比define快很 ...

  2. ES6中的var let const应如何选择

    javascript世界里面的每个人都在说有关ECMAScript 6 (ES6,也称作ES 2015)的话题,对象的巨大变化 ( 类 , super() , 等), 函数 (默认参数等), 以及模块 ...

  3. C++中 容易忽视的const 修饰符

    C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行 ...

  4. 详解ES6中的 let 和const

      前  言 JRedu ECMAScript 6 是 JavaScript 语言教程,全面介绍 ECMAScript 6 新引入的语法特性. ES6 与上一个版本 ES5 的所有不同之处,对涉及的语 ...

  5. JavaScript中的let和const

    在ES6之前,JavaScript中只有两种作用域:全局作用域和函数内部的局部作用域.ES6中新增了两个重要的关键字,let和const,从而引入了块级作用域. 关键字var 使用var关键字声明的变 ...

  6. c/c++ 中的char* ,const char* 和 char* const 总结[转]

    文章转自:c/c++ 中的char* ,const char* 和 char* const 总结 例1: char* str="abc";//错误写法 (在.c文件中是正确的) c ...

  7. c++ primer 中讲的顶层const 和 底层 const 理解

    c++ primer 中讲的    顶层const 和 底层 const   以前没搞懂的顶层const和底层const,这次看了后感觉明白了. 首先,const是一个限定符,被它修饰的变量的值不能改 ...

  8. c++中的static,const,const static以及它们的初始化

    const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. static表示的是静态的.类的静态成员函数.静态成员变量是和类相关的,而不是和类的 ...

  9. C#中数据类型char*,const char*和string的三者转换

    C#中数据类型char*,const char*和string的三者转换: . const char* 和string 转换 () const char*转换为 string,直接赋值即可. EX: ...

随机推荐

  1. Java描述设计模式(02):简单工厂模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景简介 1.引入场景 订餐流程简单描述 1).食品抽象类,规定食品的基础属性操作 2).鱼类,鸡肉类食品类扩展 3).订餐流程类,根 ...

  2. Airtest 之 游戏自动化(5分钟教你王者农药刷金币)

    一.准备工作: 1)安装腾讯手游助手,下载王者荣耀,安装启动( 你也可以直接连接手机启动游戏,或者使用其他的模拟器  ) 2)安装AirtestIDE,在设备窗中连接游戏Windows(详情参考笔者另 ...

  3. 线程队列queue的使用

    其实线程队列queue跟进程Queue的用法一样. 一.先进先出 import queue q = queue.Queue() q.put('kobe') q.put('cxk') print(q.g ...

  4. goweb- 对请求的处理

    对请求的处理 Go 语言的 net/http 包提供了一系列用于表示 HTTP 报文的结构,我们可以使用它 处理请求和发送相应,其中 Request 结构代表了客户端发送的请求报文,下面让我们看 一下 ...

  5. PHP简单判断当前使用的是什么浏览器

    PHP简单判断当前使用的是什么浏览器,判断浏览器类型的方法,方便统计网站访问用户使用浏览器的比例. 判断浏览器类型方法 function userBrowser() { $user_OSagent = ...

  6. Java操作数据库——手动实现数据库连接池

    Java操作数据库——手动实现数据库连接池 摘要:本文主要学习了如何手动实现一个数据库连接池,以及在这基础上的一些改进. 部分内容来自以下博客: https://blog.csdn.net/soonf ...

  7. ios中友盟集成好使用总结

    参考链接:https://www.jianshu.com/p/a8ff46a7c966

  8. R Data Frame

    https://www.datamentor.io/r-programming/data-frame/ Check if a variable is a data frame or not We ca ...

  9. 循环语句for基本概述

    循环语句for基本概述 01. for循环基础语法 for 变量名 in [ 取值列表 ]do 循环体done 02. for循环基本使用示例 #取值列表有多种取值方式,可以直接读取in后面的值,默认 ...

  10. python字典中列表追加数据

    dict = {} for i in range(1, 6): if i not in dict: dict[i] = [] for j in range(101, 106): dict[i].app ...