标题简介
首先我们先了解一下let
let 是ES6新增的声明变量的语法 作用类似于var
es6以前的是没有块级作用域的
let声明的变量特点
- 使用let声明的变量 只在let所在的代码块起作用 (变量绑定)
- 在同一代码块内(块级作用域) 使用let声明的变量 可以重新赋值 但是不能重新声明
- let声明的变量 必须在声明之后才能使用(不存在变量提升)
- 暂时性死区
- 在全局作用域内使用let声明的变量 但是不属于全局对象的属性
1.我们先了解一下最基本的写法
let a=10;
var b=20;
console.log(a);
console.log(b);
输出结果如图所示:
解析:这个时候我们现在用let声明的变量,已经好处我们一部一部的解析
2.暂时性死区
if(true){
a='123';
console.log(a); //ReferenceErro
let a;
console.log(a); //undefined
a=123;
console.log(a);//123
}
3.没有变量提升的能力
console.log(a);//报错
let a=10;
console.log(b);//undefined
var b=20;
解析:这里我们可以看到,我们使用let的关键字定义出来的变量会报错啊,不过使用var的关键字定义出来的并没有报错,这说明了let关键字定义出来的变量并没有变量的提升能力
4.不能带有重复声明
function fn(){
let a = 10;
let a =1;
console.log(a);
}
fn()
输出结果 :Uncaught SyntaxError: Identifier ‘a’ has already been declared
下面我们看一下const
1.他一旦声明过后,数据就不可改变
const a = 1;
a= 12;
console.log(a);//Uncaught TypeError: Assignment to constant variable.
2.用const一旦声明后,就必须赋值
const a;
a = 10;
console.log(a);//Missing initializer in const declaration
3.存在暂时性死区
if(true){
const a =5;
}
console.log(a)// a is not defined
4.不可提前声明,必须先定义后再使用比如
console.log(a);//Uncaught ReferenceError: Cannot access 'a' before initialization
const a =10;
举个栗子;
1.var声明变量是否会再变量提升呢?let和const是否存在变量提升?
console.log(a);
var a = 100;
答:// undefined ==> a已声明还没赋值【var a】,默认得到undefined值
console.log(b);
let b = 10;
答: // Uncaught ReferenceError: b is not defined ==> 报错:找不到b这个变量
console.log(c);
const c = 10;
答: // Uncaught ReferenceError: b is not defined ==> 报错:找不到c这个变量