var let const的区别

var

  • 定义的变量可以被修改,如果不初始化会默认赋值为”undefined”,相对于let,var声明的变量只能是全局作用域或者和整个函数作用域的
  • var可以在同一个作用域中重复定义一个变量,最后定义的变量为该变量的值

let

  • let声明的变量只在其声明的块或子块中可用,这一点,与var相似。二者之间最主要的区别在于var声明的变量的作用域是整个封闭函数
  • 同一个作用域中用let重复定义一个变量将引起 TypeError
  • 在 ECMAScript 2015 中,let 绑定不受变量提升的约束,这意味着 let 声明不会被提升到当前执行上下文的顶部。在块中的变量初始化之前,引用它将会导致 ReferenceError(而使用 var 声明变量则恰恰相反,该变量的值是 undefined )。这个变量处于从块开始到 let 初始化处理的”暂存死区“之中。

var和let最重要的区别:let的作用域是块,而var的作用域是函数

const

  • 常量是块级作用域,很像使用 let 语句定义的变量。常量的值不能通过重新赋值来改变,并且不能重新声明
  • 常量作用域可以是全局或本地声明的块。 与var变量不同,全局常量不会变为窗口对象的属性。需要一个常数的初始化器;也就是说,您必须在声明的同一语句中指定它的值(这是有道理的,因为以后不能更改)。
  • const声明创建一个值的只读引用。但这并不意味着它所持有的值是不可变的,只是变量标识符不能重新分配。例如,在引用内容是对象的情况下,这意味着可以改变对象的内容(例如,其参数)。
  • 关于“暂存死区”的所有讨论都适用于let和const。
  • 一个常量不能和它所在作用域内的其他变量或函数拥有相同的名称