var,let和const

227 阅读2分钟
重复声明变量提升暂时性死区window 对象的属性和方法块级作用域
解释已经存在的变量或常量,又声明了一遍提升变量的声明到当前作用域的顶部只要作用域内存在 let、const,它们所声明的变量或常量就自动“绑定”这个区域,不再受到外部作用域的影响全局作用域中,var 声明的变量,通过 function 声明的函数,会自动变成 window 对象的属性或方法作用域链:内层作用域->外层作用域->...->全局作用域
let不允许不存在/不会变成
const不允许不存在/不会变成
var允许存在没有/没有

var关键字

1.var声明作用域

使用var操作符定义的变量会成为包含它的函数的局部变量。该变量将在函数退出时被销毁。 But,在函数内定义变量时省略var,可以创建一个全局变量,可在函数外部被访问到(不推荐)。

2.var声明提升

使用var声明的变量会自动提升到函数作用域顶部

let声明

let 和var最明显的区别:let声明的范围是块级作用域,而var声明的范围是函数作用域。(块级作用域是函数作用域的子集)

1.暂时性死区

let不会变量提升,在let声明之前执行瞬间被称为“暂时性死区”

2.全局声明

与var不同,使用let在全局作用域中声明的变量不会成为windows对象的属性

3.for循环中的let声明

使用let,迭代变量的作用域仅限于for循环内部

const声明

const的行为与let基本相同。重要的的区别是用const声明变量时,必须同时初始化变量

  1. 一定要赋初始值 const A;//报错

  2. 常量的值不能修改 const TEAM = 'livepool'; TEAM = 'BACA'; //报错

  3. 块级作用域

  4. 对于数组和对象的元素修改,不能算作对常量的修改,不会报错

const TEAM = ['MESSI','SUAREZ','NEYMAR'];TEAM.push('VIDAL');//不报错