Javascript变量以块状方式提升

时间:2017-11-27 11:54:21

标签: javascript hoisting

我有两个代码块:

代码块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',它会抛出引用错误。而不是 _。每个,如果我使用内部函数,它会抛出相同的错误。我想了解变量和功能提升。如果'A'变量 temp 被提升到函数的顶部,为什么不发生'B'或内部函数?

2 个答案:

答案 0 :(得分:1)

  

如果对于'A',变量temp被提升到函数顶部

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

  

为什么“B”或内部功能没有发生?

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

答案 1 :(得分:0)

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

请参阅:https://www.w3schools.com/js/js_scope.asp

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

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