这是我参与「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的区别,以及如何使用的知识点。
看到掘金上的好文章,如果对你有帮助,顺手点个赞,或者把文章收藏。不用担心找不到了,以后也能经常收到类似好回答,我会持续进行更新。