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: ...
随机推荐
- springaop\ cglib\ AspectJ
元编程 vs 动态代理 vs isa代理 springaop的底层实现有两种,一种是jdk的动态代理,另一种是cglib,springaop没有用到aspectj,只是借鉴了它并添加了aspectj风 ...
- python-schedule模块(定时任务)基于官方文档总结
一.模块安装 pip3 install schedule 官方文档 二.常用的使用案例 #基本格式 #创建方法 def func(): print("方法") #创建定时 sche ...
- JavaScript 使用new关键字调用函数
使用new关键字调用函数 test.js 代码如下 function Person(name, age, obj) { var o = new Object(); o.name = name; o.a ...
- JS基础语法---预解析
预解析:就是在解析代码之前 1. 预解析做什么事? 把变量的声明提前了----提前到当前所在的作用域的最上面 函数的声明也会被提前---提前到当前所在的作用域的最上面 举例: function ...
- Servlet 使用介绍(2)
说明 本篇由于介绍Servlet容器回传请求方法service(ServletRequest req, ServletResponse res);传入参数用户请求参数request和请求返回参数res ...
- 读书笔记_python网络编程3(5)
5. 网络数据与网络错误 应该如何准备需要传输的数据? 应该如何对数据进行编码与格式化? Py程序需要提供哪些类型的错误? 5.1. 字节与字符串 PC与网卡都支持将字节作为通用传输单元.字节将8比特 ...
- 数据结构笔记2(c++)_跨函数使用内存的问题
预备知识 1.所有的指针变量只占4个子节 用第一个字节的地址表示整个变量的地址 //1.cpp 所有的指针变量只占4个子节 用第一个字节的地址表示整个变量的地址 # include <stdi ...
- Python语法速查: 4. 字符串常用操作
返回目录 (1)字符串常用方法 Python3中,字符串全都用Unicode形式,所以省去了很多以前各种转换与声明的麻烦.字符串属于序列,所有序列可用的方法(比如切片等)都可用于字符串. 注意:字符串 ...
- SPA项目之CRUD+表单验证
1. 表单验证 Form组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则, 并将Form-Item的prop属性设置为需校验的字段名即可 <el-dialog :titl ...
- 移位寄存器及verilog代码
通用移位寄存器 作用:后续补全 )( :] Data_out, output MSB_out, LSB_out, :] Data_in, input MSB_in, LSB_in, input s0, ...