目录
相同点
都是定义变量,但是在es6中不在使用var
一 三者不同点
1.声明提升
先声明
在es6中let 跟const 都是先声明在使用的
在var中 它的顺序没有要求
console.log(num) //undefined
var num = 123
在 let/const 中
console.log(num) //undefined
let num = 123 报错
2.变量覆盖
在var中 可以定义相同的变量名
var num1 = 12
var num1 = 34
console.log(num1) // 34
eg:在外面定义obj里面有大量数据 var obj = {}
在次声明obj为字符串 obj = ' ' 它会把之前对象里面的数据全部覆盖,会出现一些不可预知的错误
在 let/const 中
定义相同的名字时,编译器就会自动报红
已经定义了不能在重复定义
3.没有块级作用域(重要)
function fn2() {
for(var i = 0; i <3; i++){
console.log(i) // 0 1 2
}
}
fn2()
如果在for循坏外打印i
function fn2() {
for(var i = 0; i <3; i++){
console.log(i) // 0 1 2
}
console.log(i) // 3
}
fn2()
依然会打印出3,说明var没有块级作用域
var定义的i本来是在for循坏里使用的,但它却也可以在for循环外打印 换成let 跟const 会报错
二 const 与let 的区别
const定义的叫做常量 一般常量名要大写,用于全局的
let定义的叫做变量
1.const 声明之后必须赋值 否则就会报错
const demo 报错
2.定义的值不能去修改,引用数据类型可以修改否则会报错
const demo = 123
demo = 456
console.log(demo) 报错