区别一 使用var在全局作用域中声明的变量会成为window对象的属性,let不会
var name='ll';
console.log(window.name); //ll
let age = 22;
console.log(window.age); //undefined
区别二 let声明的范围是块作用域,var声明的范围是函数作用域
if(true){
var name='ll';
console.log(name);//ll
}
console.log(name); //ll
if(true){
let age=22
console.log(age); //22
}
console.log(age); //报错 age未定义
区别三 let声明的变量不会在作用域中被提升,var存在变量提升
console.log(age) //报错 age未定义 在解析代码时,JavaScript引擎也会注意出现在块后面的let声明
let age=22;
var name = 'll';
function train(){
console.log(name);
var name = 'll'
}
train() //undefined;
区别四 let不允许同一个块作用域出现冗余声明,var允许,后面声明的变量值会覆盖前一个。
var name = 'll';
var name = 'lu'
let age = 22;
let age = 31;//报错 标识符age已经声明过了
对于声明冗余报错不会因为混用let和var而受影响
const声明
const的行为与let基本相同,唯一一个重要的区别是它声明变量时必须同时初始化变量,且尝试修改const声明的变量会导致运行的错误
如果用const声明的是一个对象,那么修改这个对象内部的属性并不违反const的限制