Javascript提升混乱

Javascript hoisting confusion

本问题已经有最佳答案,请猛点这里访问。

我读了Kyle的I don't know JS并且知道函数声明将在var之前首先hoist。 所以在下面的代码中

1
2
3
4
5
6
7
8
9
   foo();
   var a = true;
   if ( a  ) {
          function foo() { console.log("a"  );  }
   }else {
          function foo() { console.log("b"  );  }
   }

   foo();

foo应该首先被提升,并且应该打印"b"作为第一个foo()的输出,对吗? 或者我错过了什么?

解释或了解代码并在不同场景中提升的链接将是一个很大的帮助。


吊装(以你在这里所期望的方式)只有在有明确的事物的先例顺序时才会起作用。 在这种情况下,因为你的函数是在if块中定义的,所以不会像你期望的那样提升它。

这将有效:

1
2
3
4
5
  foo();
   var a = true;
   function foo() { console.log("a"  );  }

   foo();

因为它从等式中删除了你的if语句。