2016-08-16 112 views
-2

我读的Javascript权威指南,我遇到了一个关于功能范围说明:“JavaScript的功能范围是指在函数内声明的所有变量在整个函数的身体都可见
由于巴()有在函数foo()中声明了一个变量b,为什么在这种情况下b没有被提升,并且输出不是未定义的(内部变量b应该在foo()的整个主体中可见)?
为什么变量b在这个例子中没有悬挂?

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

    } 
    foo(4); 
+0

你回答你自己的问题。由于bar是一个函数,因此b的作用域为bar。对foo来说是不可见的。只有酒吧是可见的,但酒吧内的一切都不是。 – Shilly

回答

3

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

b在其范围内的功能,这是bar;不是foo

相关问题