var
具有变量提升,但是JS没有块级作用于所以例如for循环当中var声明的变量,再for循环外部可以直接访问到
1 for(var i = 0 ; i < 10 ; i++){ 2 3 } 4 console.log(i); //10
1 for(var i = 0 ; i < 10 ; i++){ 2 setTimeout(function(){ 3 console.log(i); //打印十次10 4 },1000) 5 }
let
和var非常相似,区别在于,声明的变量,只在当前作用域内可以被访问,并且不允许重复声明
//for内部定时器访问 for(let i = 0 ; i < 10 ; i++){ setTimeout(function(){ console.log(i);//分别打印0-9 },1000) } //for外部访问 for(let i = 0 ; i < 10 ; i++){ } console.log(i) //报错 Uncaught ReferenceError: i is not defined //重复声明 let a = 1; let a = 2; //报错 //Uncaught SyntaxError: Identifier 'a' has already been declared
const
没的说,常量
作用全局,不能重复声明,如果是对象,可以修改对象内的属性