let 和 const

let

特性

let 用法与 var 类似,但是所声明变量只在 let 命令所在的代码块内有效
不允许重复声明,因此函数内不允许声明变量与参数一致
不允许变量提升,必须在定义后使用

场景

for 循环

const

特性

const 与 let 类似。不同在于声明一个只读常量,一旦声明值就不能改变

场景


块级作用域

特性

JS 只有全局作用域和函数作用域,导致许多场景不合理,比如函数内部赋值暴露为全局变量,循环体结束后变量没有消失泄露为全局变量
通过 let 可以让 js 拥有块级作用域的能力,也就是声明变量在 {} 括号中有效
TS 将 let 在 ES5 环境中有效,使用方式是利用编译时转换为函数作用域

场景

匿名函数可以被 {} 替代

声明变量的六种方式

ES5声明变量有两种方式分别是 var 和 function ES6 扩展了 let const import class


顶层对象的属性

浏览器环境是 window 对象,在 node 中指的是 global 对象。ES5 中顶层对象的属性与全局变量是等价的
ES6 中 var 和 function 表现与 ES5 一致,依然挂载到 window 对象。但是规定 let const class 命令声明变量不属于顶层对象的属性