var
变量可提升
var可重复声明 (var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历)
var定义的变量作用域是全局/局部作用域,let定义的变量如果在{}中只能在{}中调用
let
let声明的变量只在局部作用,let定义的变量如果在{}中只能在{}中调用
防止变量污染
块级作用域(内层变量可能覆盖外层变量)
const
1、onst声明的常量不可被改变(const保证的并不是变量的值不能改动,而是变量指向的那个内存地址不能改动。)
2、初始值设置: 在变量声明时,var 和 let 可以不用设置初始值。而const声明变量必须设置初始值。
3、块级作用域(内层变量可能覆盖外层变量)
const与 let 定义的变量不能重复
// var 定义的变量
var a = 100 ;
let b = 200 ;
// 变量名称重复 重复赋值效果
var a = '北京' ;
console.log( a );
// 变量名称重复 结果是报错
let b = '上海' ;
const与 let定义的变量如果在{}中只能在{}中调用
// 在 {} 中 使用 let 定义变量 只能在 { } 中 使用
// 如果需要在 { } 中 对 let 定义的变量 进行操作
// 提前定义 变量 在 {} 中 进行赋值操作
if( ){
var a = 1;
let b = 2 ;
// let 声明的变量 在 { } 中可以调用
// 对 {} 外定义的变量 进行赋值操作
console.log( b );
}
console.log( a ) ;
// let 声明的变量 在 { } 外 不能调用
console.log( b );
区别 | var | let | const |
---|---|---|---|
是否有块级作用域 | × | ✔️ | ✔️ |
是否存在变量提升 | ✔️ | × | × |
是否添加全局属性 | ✔️ | × | × |
能否重复声明变量 | ✔️ | × | × |
是否存在暂时性死区 | × | ✔️ | ✔️ |
是否必须设置初始值 | × | × | ✔️ |
能否改变指针指向 | ✔️ | ✔️ | × |