最近看方老师的文章才算进一步了解了let
    控制台输出

    1. let a = x;

    会报错
    1566732166(1).png
    控制台再次输出

    1. let a = 10;

    神奇的事情发生了,不是成功赋值,而是报错
    1566732294(1).png
    如果在控制台输出

    1. a =20;

    还是报错
    1566732656(1).png
    a重新声明不行,那就是已经声明了,但是赋值也不行,
    来看看变量的执行过程有三个步骤:
    1.系统分配内存(这里给a分配)
    2.初始化(一般初始化为undefined)
    3.赋值
    第一次控制台报错时已经创建了内存,let的初始化和赋值是一起进行的(如果直接写 let a =x),当赋值失败那么退回1,后面你在创建a就会报错,因为系统已经给a分配过内存,但是直接赋值操作也不行,因为a只是创建没有初始化,所以不能使用,即找不到a;

    参考这篇let脑洞大开的文章