let和const是ES6里面的语法,学ES6之前都是用var来定义变量
区别一:重复声明
只有var可以进行重复声明,对let和const进行重复声明会报错
//1.不允许重复声明;
let dog="狗";
let dog="狗";
//报错:UncaughtSyntaxError:Identifier'dog'hasalreadybeen
declared
//3.不允许重复声明;
const CAT="喵喵";
const CAT="喵喵";
区别二:变量提升
定义:就是在变量创建之前使用(比如输出:输出的是默认值)
只有var可以进行变量提升,对let和const进行变量提升会报错
console.log(people1);//可输出默认值
console.log(people2);//报错:UncaughtReferenceError:people2isnot
defined
console.log(people3);//报错:UncaughtReferenceError:people3isnot
defined
var people1="大哥";//存在变量提升
let people2="二哥";//不存在变量提升
const people3="二哥";//不存在变量提升
运行结果:
区别三:作用域
只有var没有块级作用域,let和const有块级作用域
常见的作用域主要分为:全局作用域、函数作用域、块状作用域、动态作用域。
定义:块级作用域:大部分包含{}的都可以构成块级作用域,但是函数和对象不构成块级作用域
//2.块儿级作用域(局部变量);
{
var cat="狗"
let cat="猫";
console.log(cat);
}
console.log(cat);
//狗
//狗
//猫
//报错:Uncaught ReferenceError:cat is not defined
//5.块儿级作用域(局部变量);
{
const CAT="喵喵";
console.log(CAT);
}
console.log(CAT);
//喵喵
//报错:Uncaught ReferenceError:CAT is not defined
const独有属性:
1.声明必须赋初始值
2.值不允许修改(对数组元素的修改和对对象内部的修改是可以的(数组和对象存的是引用地址);)