这篇文章来较深层的讨论一下JavaScript的三种声明方式的区别。(捂脸。。。以前也就指点var 巴拉巴拉,let 巴拉巴拉 ,const 巴拉巴拉。。。)
关于var
- var声明一个变量,并且可选地将其初始化为一个值
- 关于var的作用域 —— 是当前的执行上下文,可以试试嵌套的函数,也可以说是全局
- 注意:未声明变量是全局的(未声明的变量会被挂载到window上):
- 说到var 就要想到变量提升(吧所有的变量声明移动到函数或者全局代码的开头位置)
关于let
- let语句声明一个块级作用域的本地变量,并且可选的将其初始化为一个值
- let与var的不同之处是前者在编译的时候才初始化,而且var声明的变量的作用域是整个封闭函数:
通过var声明:
通过let声明:
- 同时let和const一样,不会在全局对象新建一个属性
- 根据上面第二点,我们就可以想到通过let声明来创建一个或者多个私有成员(闭包方式也可以实现模拟私有成员)
模拟私有成员(通过let方式):
var Person
{
let privateNum = new WeakMap()
let number = 0
function Person ()