变量提升 定义 简单说就是在js代码执行前引擎会先进行预编译,预编译期间会将变量声明与函数声明提升至其对应作用域的最顶端,函数内声明的变量只会提升至该函数作用域最顶层。 案例如下 变量提升预编译后的代码结构可以看做如下运行顺序: var a; // 将变量a的声明提升至最顶端,赋值逻辑不提升。 console.log(a); // undefined a = 100; // 代码执行到原位置即执行原赋值逻辑 使用let定义的函数,变量无法变量提升。 函数提升 函数提升只会提升函数声明式,函数表达式的写法不存在函数提升。 函数提升的优先级大于变量提升的优先级,即函数提升在变量提升之上。