1、声明变量的作用域有区别
var声明没有块级作用域,可以跨块访问,不能跨函数访问,let和声明有块级作用域,块级作用域就是{ }里面的地方
{
var varTest = 'test var OK.';
let letTest = 'test let OK.';
{
var varTest = 'varTest changed.';
let letTest = 'letTest changed.';
}
console.log(varTest); //输出"varTest changed.",内部"{}"中声明的varTest变量覆盖外部的letTest声明
console.log(letTest); //输出"test let OK.",内部"{}"中声明的letTest和外部的letTest不是同一个变量
}
2、let不能在同一块作用域下声明相同变量名的变量
var声明变量可以重复声明,后一次声明的变量值会覆盖前次声明的值,而let会直接报错
var arg1 = 'test'
console.log('var第一次申明:' + arg1) //var第一次申明:test
var arg1 = 'test2'
console.log('var第二次申明:' + arg1) //var第二次申明:test2
3、let不会进行变量提升,var声明的变量会进行变量提升
console.log(arg1) //test
console.log(arg2) //报错
var arg1 = 'test'
let arg2 = 'test2'
4、const和let基本一致,不过它定义的是常量,不可修改
注意:若const定义的是对象类型,则里面的属性和方法可以更改,因为存储的是地址值