var、let和const的区别是什么?

163 阅读2分钟

这是我参与「4月日新计划更文活动」的第28天。

今天跟大家聊一下var、let和const的区别,以及他们在不同的场景中使用的解析。

先来科普一下基础知识。

首先var是ES5中定义的一种变量声明方式,而let和const是ES6中定义的两种新的变量声明方式。

他们之间的区别主要有以下几点。

1、var的作用域是函数作用域或全局作用域,而let和const的作用域是块级作用域(如if、for、switch语句块),而区分是否是块作用域主要通过大括号的方式进行界定。

2、var存在变量提升,即变量可以在声明前使用;而let和const不存在变量提升,声明之前使用会抛出ReferenceError错误,即这个变量找不到。

3、var可以被重复声明,后面的声明会覆盖前面的声明,而let和const不允许重复声明,回会直接报错。

4、var和let声明的变量的值可以被修改,而const声明的变量的值不能被修改,但对于复合类型(如数组和对象),其属性值是可以被修改。

其实,es6一定是在es5的基础上进一步优化和提升的。let和const的引入主要在代码的书写规范,维护性方面有了明显的提高。

下面,我将针对上面提到的一些知识点进行演示。

1、块级作用域

{
    let a = 10
}
console.log('a>>>', a);

上面这样定义方法和打印变量,会直接抛出a is not defined。

2、变量提升

console.log('a>>>>>', a);
const a = 10;

上面的代码会直接报错,显示:Cannot access 'a' before initialization。

3、不允许重复声明

const a1 = 12;
const a1 = 20;

上面的代码会直接报错,显示:Uncaught SyntaxError: Identifier 'a1' has already been declared。

4、const变量被修改

const c = 20;
c = 30;

const d = { name: 11 }
d.name = 22;

上面的代码在变量c重新赋值的时候会直接报错,显示:Uncaught TypeError: Assignment to constant variable。而在变量d给属性name重新赋值的时候,正常运行。

总之,只要牢记上面的一些使用规则,就可以在书写代码的时候,非常得心应手了。

以上,就是我今天总结的var、let和const的区别,以及如何使用的知识点。

看到掘金上的好文章,如果对你有帮助,顺手点个赞,或者把文章收藏。不用担心找不到了,以后也能经常收到类似好回答,我会持续进行更新。