Es6之 let和const命令与var的区别

let
一.基本用法
ES6新增了let和const命令,用来声明变量,let的用法类似于var,但是所有的声明变量,只在let所在的代码块内有效。
{
let a = 10;
var b = 10;
}
console.log(b); //10
console.log(a);//Uncaught ReferenceError: a is not defined

二.不存在变量提升
var 命令会发生变量提升,就是变量可以在声明之前使用,值为undefined

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

而let宾亮未声明之前使用将会报错
console.log(b); // 报错ReferenceError
let b = 2;
console.log(b)//2

三、不允许重复声明
let不允许在相同的作用域内重复声明同一个变量,const声明的常量也不允许重复声明
function fun(){
let a = 10;
var a= 1 ;
}
// 报错 Uncaught SyntaxError: Identifier ‘a’ has already been declared

四、暂时性死区
当块级作用域存在let命令,它所声明的变量会“绑定在这个区域”,不受外部影响。使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

var tmp = 10;
if (true) {
tmp = ‘abc’; // ReferenceError
let tmp;
}
解析:
由于存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,同一个作用域内,不能重复声明同一个变量,所以在let声明前,对tmp进行赋值则报错

const
1.const声明一个只读的常量,一旦声明,常量的值不能改变。
const PI = 3.14;//3.14
console.log(PI);
PI = 3;
console.log(PI);// Uncaught TypeError: Assignment to constant variable.

2.对于const,只声明不赋值,就会报错了。
const a;
console.log(a);//Uncaught SyntaxError: Missing initializer in const declaration
3.const命令声明的常量不提升,也存在暂时性死区,只能在声明的位置后面使用
if (true) {
console.log(b); // ReferenceError
const b = 5;
}
if (true) {
const b = 5;
console.log(b); //5
}

4.const的作用域与let命令相同:只在声明所在的块级作用域内有效
f (true) {
const b= 2;
}
console.log(b);//报错

if (true) {
const b= 2;
console.log(b);//2

}
总结:
var:变量提升(无论声明在何处,都会被提至其所在作用于的顶部)
let:无变量提升(未到let声明时,是无法访问该变量的)
const:无变量提升,声明一个基本类型的时候为常量,不可修改;声明对象可以修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值