var const let的区别

var

  1. var 声明提升,就是把所有变量声明都拉到函数作用域的顶部,且反复多次使用var声明同一个变量也不会有问题,只是会覆盖上一个变量
  2. var声明的变量,成为window对象的属性

let

  1. let声明的范围是块作用域,而var声明的范围是函数作用域
  2. let声明的变量不会在作用域中被提升
  3. let声明的变量,不会成为window对象的属性
    4.let不可重复声明同一个变量,会报错

const

1.它的行为与let基本相同,唯一一个重要的区别是它声明变量的时必须同时初始化,且其值不可更改

有了let和const,大多数开发都不再使用var了,限制自己使用let与const


const定义的变量一定是不可改变的么?

不是的,const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。换言之,对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量;但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。

如果const变量引用的是一个对象,那么修改这个对象内部的属性并不违反const的限制

所以如果它保存是的常量,是不可更改的。
一般情况下,用const保存常量,let保存变量。

const person = {}
person.name = 'Matt' // ok

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