在 JavaScript 中,提升(Hoisting) 是指 JavaScript 引擎在执行代码之前,会将变量和函数的声明阶段移动到它们所在作用域的最顶部的这一行为。 需要注意的是,代码并没有真正在物理位置上被移动,而是在编译阶段(执行上下文创建阶段),引擎把变量和函数的声明放入了内存中。 以下是详细的解释和两者的优先级规则: --- 1. 变量提升(Variable Hoisting) 在使用 声明变量时,只有声明会被提升,赋值操作不会被提升,它会留在原地等待执行。 示例代码: JS 引擎实际的理解方式: > 注意(ES6+): 使用 和 声明的变量也会发生提升,但它们不会被初始化为 ,而是进入所谓的暂时性死区(TDZ, Temporal Dead Zone)。如果在声明之前访问它们,会抛出 错误。 --- 2. 函数提升(Function Hoisting) 使用函数声明()定义的函数,整个函数体(包括声明和定义)都会被提升到作用域的最顶部。这意味着你可以在函数声明之前调用它。 示例代码: 例外:函数表达式不会被完整提升 如果你使用变量赋值的形式定义函数(函数表达式或箭头函...