JS 提升如何在函数内工作?

Fah*_*heb 3 javascript hoisting

有人可以向我解释为什么 (1) 返回11(2) 返回undefined。功能块/声明对提升有何影响?

// (1)
var boo = 11
console.log(boo) // 11
var boo = 10
Run Code Online (Sandbox Code Playgroud)

// (2)
var boo = 11
function foo() {
   console.log(boo)
   var boo = 10
}
foo() // undefined
Run Code Online (Sandbox Code Playgroud)

AJ_*_*AJ_ 6

JavaScript 在函数内提升意味着变量的声明被移动到函数块的顶部。当您输入 , 时foo()var boo即使您还没有到达它,也会立即重新声明(因为 JS 引擎知道该声明存在于函数中)。因此,它未定义的原因是因为它刚刚被声明,直到下一行才赋值。

实际上,如果您在适当的范围内声明变量并且不重新声明具有相同名称的变量,那么您不应该遇到这种情况,但我理解您的好奇心。

您可以在此处阅读有关此内容的更多信息。