var let const 的区别

252 阅读2分钟

首先,这三个关键字都可以声明变量,var在所有的ECMAscript版本中都可以使用,let和const只能在es6及以后的版本中使用。
var
var name; //定义一个变量name
var 可以保持任何类型的值;
var 在初始化未赋值的状态下,此时值为undefined;在声明之前调用的,值也是undefined;
var 赋值以后,还可以在更改值及值的类型;
var , let , const定义多个变量用,分割;
作用域:函数作用域
在函数内部使用var声明的作用域就是当前函数内,在函数退出时被销毁,在函数外部调用会报错:
Uncaught ReferenceError: age is not defined
在函数内部如果省略var,直接声明的变量是一个全局变量,不建议这样做;
在同一个作用域内,同一个变量可以声明多次,值取向上最近的一次,在当前作用域内,变量提升,即使外层作用域存在当前变量,取值也是undefined

image.png
let 作用域是块作用域{}
不允许同一个块作用域内多次声明,只要同一块作用域内有相同声明的变量,代码不执行,直接报错,即使使用var声明的也不可以
let声明的变量不会在作用域内被提升,只要当前作用域内有声明,即使外层作用域存在该变量,也会报错,声明之前引用变量执行的瞬间被称为暂时性死区;
const
与let基本相同,唯一的区别是声明变量时必须初始化赋值,且声明的变量不能修改;
const声明的限制是不能修改它指向的变量的引用地址,如果声明的是对象,对象内部的属性还是可以修改的。
其他
var 声明的全局变量挂载在window上,称为window的属性
let和const声明的全局变量不会,在window.name.调用是undefined