let const 和var

121 阅读1分钟

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