ES6中两种定义变量的方式const和let

let与const

ES6 新增加了两个重要的 JavaScript 关键字: let 和 const。let 声明的变量只在 let 命令所在的代码块内有效。const 声明一个只读的常量,一旦声明,常量的值就不能改变。

let

let声明:块级作用域
let跟var作用类似,但是有很大的区别就是一个块级作用域,而var声明的范围是函数作用域。也就是说let声明的变量只在它所在的代码块有效。

for (let i = 0; i < 10; i++) {
  console.log(i);
}
console.log(i); // i is not defined

let特点二:不存在变量提升
let 不像var 那样会发生 ‘变量提升’ 现象,因此,变量需要先声明然后再使用,否则报错;

// var 的情况
console.log(a);  // undefined
var a = 2;

// let的情况;
console.log(b);  // 报错
let b = 2;

let特点三:暂时性死区
块级作用域内存在let命令,它所声明的变量就绑定在这个区域,不再受外部影响;

var a = 123;
if (true) {
  a = 'abc';
  let a;
  console.log(a); // a is not defined
}

代码定于全局变量a,但是在块级作用域内let又声明了一个局部变量a,导致绑定了这个块级作用域;因此打印出a会报错。

特点四:不允许重复声明
let不允许在相同的作用域内,重复声明一个变量。

function a() {
  let a1 = 10;
  let a1 = 1;
  console.log(a1);
}
a();

const

const特点一:
const声明一个只读常量,声明后常量的值就不允许被改变。

const a = 1; 
a = 2; 
console.log(a);  //报错

也就是说const只要声明后,就必须初始化,不能留在以后赋值。如果const声明一个变量不被赋值,就会报错。

const aa;  // 报错

const特点二:const的作用域与let声明命令相同,只有在块级作用域内有效。

if (true) {
 const aa = 1;
} 
console.log(aa);  // 报错

这种在外部输出就会报错。

特点三:不可以重复声明和let一样

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

对于复合类型的变量,数组对象等这种储存的地址,不可以改变这个地址,不能把该地址指向另外的地址,但是对象本身是可以改变的,比如给他添加新的属性。

const a = [];
a.push('Hello'); // 可执行
a.length = 0;    // 可执行
a = ['55']  // 报错

总结

ECMAScript 6增加let和const从客观上为这门语言更精确地声明作用域和语义提供了更好的支持。
在学习let和const后,可以发现这两种声明方法会比var声明更加明确,提升了代码质量。const和let有助于提升提升代码质量,因为明确了作用域,声明位置,以及不变的值。const优先,let次之。使用const声明可以让浏览器运行时强制保持变量不变。
let的总结:

1.使用let关键字声明的变量具有块级作用域,var关键字是不具备这个特点的。
2. 防止循环变量变成全局变量
3.使用let关键字声明的变量没有变量提升
4.使用let关键字声明的变量具有暂时性死区特性

const的总结:

1.const声明的变量是一个常量
2. 如果是基本数据类型,不能改具体的值,如果是复杂数据类型,不能更改地址
3.使用const声明的时候必须要给定初始值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值