2016-08-16 116 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

相關問題