var/let/const 变量的申明
在ES2015也就是ES6规范之前,Javascript中对变量的定义只有var
这个关键字进行变量申明,或者你可以不用关键字(现在情况是,你也可以不申明变量,只要变量名不重复)
而在ES2015规范中新添加了let
和const
两个关键字,同样也是用来进行变量申明的,其中const
是定义常量,也就是,一旦申明了变量,那么变量的值是不能修改的。
关于var
、let
和const
三者的使用区别,在这里也不多介绍了,因为网上也有不少关于三者的解释说明,如果你要详细研究的话我建议查看Mozilla的MDN文档,上面有规范的详细说明与示例。
这里主要是想推荐下自己使用的一个感觉,因为再对比了国外和国内对ES2015规范使用的代码中,我发现,国内更倾向于使用let
来申明变量,而国外更多的是使用const
来申明,在以前我也是简单的用let
来代替var
使用,但是在看了一些老外的代码后觉得如果没有必要那么应该使用const
来申明变量,这里可能有人会奇怪了,const
不是申明常量,怎么会申明变量呢?其实const
申明的常量分为两类,值类型和引用类型,对于值类型,比如
const a = 1
复制代码
那么这个变量a
的值是不能改变的,但是对于引用类型,比如
const b = {str:'hello',name:'world'}
b.name = 'world!'
复制代码
其中b
是引用类型,你可以改变b
的属性值,但是不能改变b
的引用地址
那么接下来就要说说为啥推荐更多的使用const
首先,我们在引用第三方库的时候,一旦命名好了,其实我们是不希望在之后的代码中改变的,比如说
const path = require('path')
path.resolve(...)
复制代码
这样定义的话就能保证在下面代码中使用的时候不会使用了别的含义的对象
其次,在遍历方法中,我们不应该改变原始的遍历数据,而是应该产生一个改变后的副本数据
for(let item of obj) {
item = ...
}
for(const item of obj) {
item = ...
}
复制代码
上面一种遍历的时候对获取的对象是使用let
申明的,这样我们在遍历数据的时候能够修改原始数据
而下面一种使用了const
来申明,那么我们是不能对原始数据做直接的修改,当然了,如果遍历的元素是引用类型,那么还是能够修改引用值的,但是使用const
申明的话,会提醒我们,不要去修改原始数据
最后,就是即使使用cosnt
申明,我们一样可以对引用类型的值进行修改、添加、删除的,使用起来跟let
是没有分别的
所以个人觉得多使用const
的对变量申明会更好些