var、let、const三者之间的区别和异同

先之间总结一下区别吧

  1. var和let作用都是用作声明变量,const声明一个常量,
  2. var的声明是变量提升,能够作用于全局,而let和const作用于局部的
  3. var是能够重复声明的而let和const是只能声明一次的
  4. 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的总结了,如有问题,希望纠正。