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: ...
随机推荐
- 基于Spring Boot+Spring Security+JWT+Vue前后端分离的开源项目
一.前言 最近整合Spring Boot+Spring Security+JWT+Vue 完成了一套前后端分离的基础项目,这里把它开源出来分享给有需要的小伙伴们 功能很简单,单点登录,前后端动态权限配 ...
- C#构造函数、属性的应用
using System; using System.Collections.Generic; using System.Text; namespace test { class Program { ...
- Selenium(十四):自动化测试模型介绍、模块化驱动测试案例、数据驱动测试案例
1. 自动化测试模型介绍 随着自动化测试技术的发展,演化为了集中模型:线性测试.模块化驱动测试.数据驱动测试和关键字驱动测试. 下面分别介绍这几种自动化测试模型的特点. 1.1 线性测试 通过录制或编 ...
- JMeter资源监控插件PerfMon的使用
1.插件下载 首先下载jmeter的插件管理工具,下载地址:jmeter-plugins.org 如英文说明,把下载后的jar包放到jmeter的安装目录lib/ext文件夹下,重启jmeter,就会 ...
- javaWeb核心技术第九篇之JSP
JSP:全名是Java Server Pages,它是建立在Servlet规范之上的动态网页开发技术.在JSP文件中,HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示 ...
- IntelliJ 注解@Slf4j后找不到log问题解决
解决方案:IntelliJ IDEA安装lombok插件可以解决以上问题 .步骤:1.找到IDEA 上方的菜单栏 点击File =>Settings,或者按快捷键Ctrl+Alt+S. 2.如图 ...
- new和delete创建和释放动态数组
1.动态创建和释放一维数组 #include<iostream> using namespace std; int main() { int n; cin>>n; //分配动态 ...
- JavaScript-----6.流程控制:分支
1.流程控制 就是来控制代码按照何种顺序来执行,流程控制有三种结构:顺序结构.分支结构.循环结构 2.顺序流程控制 程序按照代码先后顺序依次执行 3.分支流程控制 JS中提供两种分支结构语句:if语句 ...
- LG2679 「NOIP2015」子串 线性DP
问题描述 LG2679 题解 设\(opt[i][j]\)代表A串前\(i\)个,匹配\(B\)串前\(j\)个,选择了\(k\)个子串的方案数. 转移用前缀和优化一下. \(\mathrm{Code ...
- 【zabbix告警配置】zabbix服务配置邮件告警
一.安装邮件服务 在zabbix_server服务端安装邮件和邮件发送服务,这里可以参考我另一篇邮件服务部署文章:https://www.cnblogs.com/HeiDi-BoKe/p/118833 ...