var、let、const

1、既然ES5已经有了var,为什么还有搞个let、const呢?
用var声明的变量存在一些问题,为了解决这些问题就搞出来了let、const。
啥问题呢?

  • 1.1 var声明的变量存在变量提升的现象。
console.log(name)
var name = 'test'

这里会输出undefined。
这段代码的执行顺序是:
先将var name提升到最上面,并赋初始值undefined(这是编译阶段的干的)。
然后执行的时候,console.log(name)会找到name,且name是undefined。
最后才是name=‘test’.

  • 1.2 var声明的变量会导致全局污染。
    就是可以重复声明,还不报错。
    比如你在某处定义了一个name,然后你忘了。这很正常。后来你又定义了一个name。那么这个就重复了。
    如果引用了库,然后定义的变量和其他库的冲突了就覆盖先前定义的了。
  • 1.3 有时变量不能被回收,浪费内存。
for(var i =0;i<10;i++){
   // 随便什么吧
}
console.log(i)

这里i是10。
其实这里应该被回收才对。

2、let、const有什么好处?
let、const引入了块级作用域的概念。
解决上述的那些问题。
const专门用来声明常量。

3、const声明的常量一定不能改变么?
可以改的。
const声明的基本数据类型的数据,是不能改变的。会报错。
而const声明的引用类型的数据是可以改变的。因为const声明指向的是变量在内存中的引用。
如:

const obj = {a:1,b:2}
obj.a = 6;

这种情况就能改变的。

你可能感兴趣的:(var、let、const)