为什么在这个例子中没有提升变量b?

时间:2016-08-16 14:39:08

标签: javascript hoisting

我正在阅读Javascript权威指南,并且我遇到了关于函数范围的声明:" JavaScript的函数范围意味着函数内声明的所有变量在整个函数体中都是可见的强> "
因为bar()在其中有一个变量b,而变量b又在函数foo()中声明。为什么b在这种情况下不被提升并且输出没有未定义(内部变量b应该在foo()的整个主体中可见)?

var b =5 ; 
    function foo(x)
    {
      console.log(b);
      function bar()
      {
       var b=4;
      }

    }
    foo(4);

1 个答案:

答案 0 :(得分:3)

b 范围内bar的范围是bar函数。变量 其功能不可见。这意味着所有变量将全局可见,因为它们都会传播到全局范围/最外层函数中。这正是范围应该阻止的。

b在其范围函数中被提升,即bar;不是foo