var、let、const三者之间的区别和异同
先之间总结一下区别吧
- var和let作用都是用作声明变量,const声明一个常量,
- var的声明是变量提升,能够作用于全局,而let和const作用于局部的
- var是能够重复声明的而let和const是只能声明一次的
- var和let的值在声明后是可以改变的,而const声明的常量是只读的不可改变,但对于对象和数据这种引用类型,内存地址不能修改,可以修改里面的值。
1.var
其作用就是声明一个变量,凡是用var声明的变量,都会被提升到该作用域的顶部,也就是作为全局变量。var先调用再声明不会报错但是会显示undefined
console.log(val); //undefined
var val =1
当声明在一个函数外部的时候是作为全局变量,在函数内部则作为局部变量,但是 如果在函数内部没有声明,直接定义,也是全局变量。
var a=1; //全局变量
function fn() {
var b=2; //局部变量
c=3; //全局变量
}
console.log(a); //1
fn();
console.log(c); //3 由于是全局变量 当调用fn函数时存在该变量,不调用fn是无法输出结果的
console.log(b); // 由于是局部变量 b是无定义的
2.let
let是ES6新增的命令,用来声明变量,let声明的变量只在let命令所在的代码块内有效。
// function fn(){
// let a=1
// }
// fn();
// console.log(a); // a只作用于函数中 所以输出报错:a is not defined
let必须先声明变量再使用否则会报错(也叫暂时性死区)
let b=2
console.log(b); //2
console.log(c); //Cannot access 'c' before initialization
let c=3
let不能在相同作用域声明相同变量,但是可以在不同作用域声明相同变量
let d=1
let d=2
console.log(d); //Identifier 'd' has already been declared
let e=2
{let e = 3}
console.log(e); // 2
3.const
const是声明一个只可读的常量,声明后值不可变
const a=10
a=20
console.log(a); //报错:Assignment to constant variable. (分配给常量变量)
const必须先初始化不能直接声明
const a; // 报错:SyntaxError: Missing initializer in const declaration
const a = 10; // 可行
const只可读并不是变量的值不能改动,而是变量指向的内存地址所保存的数据不得改动
const s={
a:10,
b:20
}
s.a=30 //是可以改变里面的值的
console.log(s); //{ a: 30, b: 20 }
const s={
a:10,
b:20
}
s={} //不可以直接改变s,会报错
console.log(s);
最后总结一下,声明一般使用优先顺序是const>let>var
能用const尽量用const声明,因为该变量不可修改防止数据混淆,也能防止在修改代码的过程中无意中修改了该变量导致报错,减少bug的产生。let声明没有产生预编译和变量提升的问题,先声明再使用可以让代码本身更加规范,let是个块级作用域,也不会污染到全局的变量声明。
还有就是let和const的使用场景:let一般应用于基本数据类型;const 一般应用于引用数据类型,也就是函数对象等。
以上就是我对于var、let、const的总结了,如有问题,希望纠正。