let和const命令
ES6中新增了let命令,用来声明变量,用法类似与var
let和var的不同:
1、不存在变量提升
console.log(a); //Cannot access 'a' before initialization
let a = 100;
2、同一个作用域不能重复定义同一个名称
var c = 20;
let c = 30;
console.log(c);//Identifier 'c' has already been declared
3、有严格的作用域
function fn() {
var a = "a";
if (true) {
var a = "b";
}
console.log(a);//b
}
fn();
function fn() {
var a = "a";
//ES6中引入了块级作用域,var a 和let a不在一个作用域中
if (true) {
let a = "b";
}
console.log(a);//a
}
fn();
4、块级作用域的重要性
//for循环的i会提升为全局变量
for (var i = 0; i < 5; i++) {}
console.log(i); //5
for (let i = 0; i < 5; i++) {} //i的作用域范围只能在for循环的过程中
console.log(i); //i is not defined
const的使用
const 声明一个只读的常量。一旦声明,常量的值就不能改变。
保持let的不存在变量提升,同一个作用域内不能重复定义同一个名称,有着严格的作用域;
常量obj储存的是一个地址,这个地址指向一个对象。不可变的只是这个