let、const都是ES6中新增加的特性,都表示块级作用域,即它们只在最近的代码块中生效;
let:
- let 声明一个局部变量
- 不存在变量提升,即使用的时候必须先声明
- 同一个代码块中不能重复声明
const:
- const声明一个局部常量
- 声明的时候必须要赋值,赋值之后一般不可修改内存地址,但是可以修改属性成员。(即const声明一个对象时,对象里面的属性可以修改)
- 一般使用大写命名
const NUM = 1;
NUM = 0;//报错
//但是如果声明的是一个对象
const OBJ_STUDENT = {name:'aaa'};
OBJ_STUDENT.name = 'bbb';//不报错
OBJ_STUDENT = {name:'ccc'};//报错
var:
- var 声明的是一个全局的变量,在var所在的函数内生效
- 存在变量提升,即在未声明的时候使用这个变量会打印undefined
console.log(x);//undefined
var x = '全局变量';
//但是let会报错
console.log(x);//ReferenceError: x is not defined
let x = '全局变量';