var
1.存在变量提升(变量在赋值前早已经被声明)
console.log(a);
var a = 3 ; // 输出结果为 undefined
2.没有块级作用域
let
1.不存在变量提升
console.log(a);
let a = 1 ; // 报错
2.同一作用域不能同时定义同一名称
let a = 1 ;
let a = 100; // 报错
console.log(a);
再赋值
let a = 1 ;
a = 100;
console.log(a); // 100
3.有着严格的作用域
var有函数作用域 let属于块级(即{ }内的)作用域
function a(){
let i=1;
if(true){
let i=100;
console.log(i)
}
console.log(i)
}
a() // 100;1;
const
//1.声明一个只读的常量,一旦声明,常量的值就不能改变
const a=100;
a=111;
console.log(a)
//2.声明的同时一定要赋值(常量)
const b;
//3.复杂的变量可以先声明变量的类型
const c={};
c.name='cc'
console.log(c)//正确