JavaScript的let、var、const声明变量的区别

简介

一个项目声明许多变量来存储数据。
您可以将变量视为盒子的名称,将盒子中保存的内容视为变量的值。

JavaScript允许您使用var、let、const和其他关键字来声明变量,例如:

vara;//声明一个盒子叫a=1;//改变值1放到这个盒子里//或者vara=1;letb=2;constc=3;var,let和const的区别

在前面的示例中,分别使用var、let和const以及这三个关键字来声明变量。
变量之间有什么区别?我们一起来看看吧。

var

使用var声明变量与在浏览器中声明全局变量是一样的,所以我们知道全局变量是window对象的属性。
声明一个变量相当于声明前一个窗口对象的属性。

vara=10;console.log(window.a==a);//输出true,没有块级作用域

块级作用域是ES6独有的概念,并且在ES5中仅是全局的。
由于作用域和函数作用域的原因,使用var声明的变量如果不在函数内声明,则为全局变量;如果在函数内声明,则为函数内的局部变量。

{vara=1;//全局变量letb=2;//仅在当前作用域有效}console.log(a);//输出1console.log(b);//错误:bisnotdefine变量提升console.log(a)vara=1;

上例中,最终输出值为1。
这是因为该变量正在提升。
变量提升意味着当使用var声明变量时,在解析脚本时首先逐行执行声明该变量的所有语句,无论该变量是在何处声明的。
上述代码的执行顺序如下:

vara=1;console.log(a)允许重复声明

变量可以使用var重复声明,因此JavaSciprt允许以下语句:

vara=1;varb=2;let

let是ES6中新添加的关键字,用于替换avar关键字。
使用let声明的变量具有以下特征:

变量在声明之前不能使用。

声明后不能重新声明变量

不能提升变量

变量可以具有块级作用域

leta=1;leta=2;//如果再次声明,会报错console.log(b);//如果在声明之前使用,会报错letb=2;{letc=3;//仅在当前作用域有效}console.log(三);//读取未知的声明变量。
错误const

const用于声明常量。
所谓常量,是指声明的变量必须被赋值,并且在后续使用过程中不能重新赋值。

consta=1;consta=2;//重复声明,报错a=2;//重新声明,报错constb;//没有赋初值,对于声明为const的

变量报错,类似让。
没有变量的提升,并且如果存在块级作用域,则无法在范围之外读取变量的值。

另外,正如我前面所说,声明为const的变量不能重新赋值,如果对象或数组等引用类型常量声明为const,则该常量不能重新赋值,但对象可以更改属性和数组。
元素:

consta={x:1,y:2}a.name='test'//给对象添加属性可以运行a={name:'test'}//。
重新分配值。
错误consta=[];a.push('6666');//向数组添加一个元素,可以这样做a.length=0。
//重置数组的长度。
a=['test'];//重新赋值。
错误总结

通过根据上面的简单例子和对比,发现由于历史原因,使用var声明变量存在很多奇怪的问题。
这是因为ES6中引入了let和const来声明变量,而用let和const声明的变量可以拥有自己的块级作用域。
对于模块化程序很有用。

作者:程序员读物

JavaScript中变量声明var、let、const的区别

变量声明是JavaScript的基本语法,共有三种方式:var、let、const。
用var声明的变量始终处于全局或局部范围内,在编译时提升,并且可以在未定义之前调用。
Let将变量声明为块级作用域,并且在声明阶段发生提升,这样可以避免全局变量冲突。
const声明变量值不可变,但对象和数组内容可以修改,避免了代码修改带来的问题。
综上所述,var适用于局部变量,let适用于块级作用域,const用于锁定值以避免修改引起的错误。