const let 解惑

let 块级作用域的理解

for(let i=0;i<10;i++){
    setTimeout(()=>{
        console.log(i)
    },0)
}
// 按照标准来说
for(let i=0;i<10;i++){
    let i = 隐藏作用域中的i
    setTimeout(()=>{
        console.log(i)
    },0)
}

关于let 的变量提升
其实所谓的“变量提升”不是专有名词
正常一个变量被正常加载到程序中包含 创建 初始化 赋值 三个阶段
var 变量提前的是 创建和 初始化
let 变量提前的是 创建
const 变量 提前的也是创建
程序开始运行
var 变量 赋值
let 变量 初始化 、赋值
const 变量 初始化