一 let与var的区别:
1.let 不存在变量的提升(最简单的区别):
var a = "hello"; //没用
var b = "hi"; //没用
console.log(c);
var c = "nihao"
//这时候打印出来的c是 undefined; 不会报错的原因是js是一种预解析的语言
//改为let
console.log(t);
let t = 100
// 用let的话就会报错 t is not defined
2.let在同一个作用域下不能定义重复的名字
var a = 1;
var a = 100;
console.log(a);
//这种结果是100,用var的话下面的会覆盖上面的
//使用let的话
let a = 1;
let a = 100;
console.log(a);
//用let的话 会报错:Identifier 'a' has already been declared
//但是可以使用另一种方法来改变a的值
let b = 1;
b = 100;
console.log(b);
//这种打印出来的结果就是100了
3.let有着严格的作用域
//var:他是属于函数作用域
function fun() {
var a = 1;
if (true) {
var a = 100
}
console.log(a);
}
fun()
//结果为100
//let:它是属于块级作用域
function fun() {
let a = 1;
if (true) {
let a = 100
}
console.log(a);
}
fun()
//这种结果为1
二. const
const同样具备let的以上3点,不过他声明的是一个只读的常量,一旦声明,这个常量的值就不能发生改变;
const r;//err 因为他不能只声名不赋值
const w = 100
w = 200;
console.log(w);
//这种就会报错了,因为他只能读取,不能改变
const obj = {};
obj.name = "SUN"
//这种是可以的,因为他并不是一个常量,而是一个引用数据类型;