ECAMScript中的let和const
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的更多相关文章
- 在php中定义常量时,const与define的区别?
问]在php中定义常量时,const与define的区别? [答]使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时要比define快很 ...
- ES6中的var let const应如何选择
javascript世界里面的每个人都在说有关ECMAScript 6 (ES6,也称作ES 2015)的话题,对象的巨大变化 ( 类 , super() , 等), 函数 (默认参数等), 以及模块 ...
- C++中 容易忽视的const 修饰符
C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行 ...
- 详解ES6中的 let 和const
前 言 JRedu ECMAScript 6 是 JavaScript 语言教程,全面介绍 ECMAScript 6 新引入的语法特性. ES6 与上一个版本 ES5 的所有不同之处,对涉及的语 ...
- JavaScript中的let和const
在ES6之前,JavaScript中只有两种作用域:全局作用域和函数内部的局部作用域.ES6中新增了两个重要的关键字,let和const,从而引入了块级作用域. 关键字var 使用var关键字声明的变 ...
- c/c++ 中的char* ,const char* 和 char* const 总结[转]
文章转自:c/c++ 中的char* ,const char* 和 char* const 总结 例1: char* str="abc";//错误写法 (在.c文件中是正确的) c ...
- c++ primer 中讲的顶层const 和 底层 const 理解
c++ primer 中讲的 顶层const 和 底层 const 以前没搞懂的顶层const和底层const,这次看了后感觉明白了. 首先,const是一个限定符,被它修饰的变量的值不能改 ...
- c++中的static,const,const static以及它们的初始化
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. static表示的是静态的.类的静态成员函数.静态成员变量是和类相关的,而不是和类的 ...
- C#中数据类型char*,const char*和string的三者转换
C#中数据类型char*,const char*和string的三者转换: . const char* 和string 转换 () const char*转换为 string,直接赋值即可. EX: ...
随机推荐
- 哈希算法原理【Java实现】(十)
前言 在入学时,学校为我们每位童鞋建立一个档案信息,当然每个档案信息都对应档案编号,还有比如在学校图书馆,图书馆为每本书都编了唯一的一个书籍号,那么问题来了,当我们需要通过档案号快速查到对应档案信息或 ...
- C# HttpClient设置cookies的两种办法
前言:最近公司使用HttpClient对象在发送请求,抛弃了之前的HttpWebRequest,使用httpClient有个好处:就是可以只使用一个HttpClient的实例,去完成发送所有的请求数据 ...
- Python实现图片的base64编码
import base64 if __name__ == "__main__": dir='image.jpg' basef=open(dir.split('.')[0]+'_ba ...
- 解析innodb中的MVCC
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- 松软科技带你学前端:JavaScript 使用
<script> 标签 在 HTML 中,JavaScript 代码必须位于 <script> 与 </script> 标签之间. 实例 <script> ...
- Vue结合后台导入导出Excel问题详解
话不多说,直接上前端代码 axios({ method: 'post', url: 'http://localhost:19090/exportUser',//这个是请求的地址 params: {// ...
- 【JDBC】JDBC入门
JDBC的入门 搭建开发环境 编写程序,在程序中加载数据库驱动 建立连接 创建用于向数据库发送SQL的Statement对象 从代表结果集的ResultSet中取出数据 断开与数据库的连接,并释放相关 ...
- curl的使用指南
一.查看网页源码 直接在curl命令后加上网址,就可以看到网页源码.我们以网址www.sina.com为例(选择该网址,主要因为它的网页代码较短): $ curl www.sina.com M ...
- 如何在mac版本的python里安装pip
mac里面python自带easy_install,在终端里面执行sudo easy_install pip.运行完可以用pip help测试一下是否安装成功,成功安装后,直接pip install ...
- bay——RAC_ASM ORA-15001 diskgroup DATA does not exist or is not mounted.docx
RAC ORA-15001: diskgroup "DATA" does not exist or is not mounted Oracle数据库识别不了存储Diskgroup ...