Javascript 可变提升块

Javascript variable hoisting blockwise

我有两个代码块:

代码块 A:

function test() {
  var testBool = true;

     if(!testBool) {
        var temp = 10;
     } else {
        temp = 20;  
     }
     console.log(temp);
  }

和代码块 B:

function test() {
  var testBool = true;
  var array = [1,2];

  _.each(array, (item) => {
     if(!testBool) {
        var temp = 10;
      } else {
        temp = 20;
      }
  });
  console.log(temp);
}

对于 'A',它会打印 20,这很好。对于 'B',它抛出 引用错误 。如果我使用内部函数而不是 _.each,它会抛出相同的错误。我正在尝试了解变量和函数提升。如果 'A' 变量 temp 被提升到函数的顶部,为什么 'B' 或内部函数没有发生这种情况?

If for 'A' the variable temp is being hoisted to top of the function

"函数顶部"(声明在其中)

why is it not happening for 'B' or an inner function ?

因为它是在不同的函数中声明的。

Javascript 具有函数作用域,这意味着变量符号在它们声明的函数内是可见的。

参见:https://www.w3schools.com/js/js_scope.asp

所以在第二个例子中,temp 被声明在 console.log 语句的范围之外(因此引用错误)。

提升只是意味着它们在完整的函数体中可用,而不仅仅是在声明它们的行之后 (https://www.w3schools.com/js/js_hoisting.asp)