1.var定义变量,可以重复声明,重复赋值 var全局作用域或函数作用域 有变量提升。
var x = 1;
var x = 2; //重新声明变量 x,覆盖之前的值
console.log(x) // 输出 2 可以重复声明
2.const定义常量,不可以重复声明,不可以重复赋值 块级作用域 不存在变量提升。
let a = 'codereasy'
let a = 'hahaha' // 重新声明A变量报错了
let a = 'codereasy'
a = 'hahaha'//重新赋值报错了
3.let定义变量,不可以重复声明,可以重复赋值,块级作用域 不存在变量提升。
let a = 'codereasy'
let a = 'hahaha' // 重新声明A变量报错了
let a = 'codereasy'
a = 'hahaha'//这样是可以的,因为是修改a的值,并没有重新声明
变量提升:在代码执行之前,将变量声明和函数声明提升到当前作用域的顶部,(只有声明会被提升,赋值操作不会被提升)
var message; //js引擎把所有的函数和变量的声明放在第一行,如果是const,let会报错
console.log(message); // 输出 undefined 而不是报错
var message = "Hello, world!";
console.log(message); // 输出 “Hello, world!”
var变量会被提升到作用域的顶部,并且会被初始化为undefined,在真正定义的地方,var才会别赋值为他真正的值,let和const不会被初始化为undefined