2016-08-16 7 views
-2

私はJavascript決定的なガイドを読んでいると私は、関数のスコープについての声明に出くわした:「のJavaScriptの関数スコープは関数内で宣言されているすべての変数が関数の体全体表示されていることを意味し、」
バーので()していますなぜなら、この場合、bがホイストされず、出力が未定義ではない(内部変数bはfoo()の本文全体に見えるはずである)かどうかは、関数foo()内で宣言されている変数bです。
なぜこの例では変数bが吊り上げられていないのですか?

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

    } 
    foo(4); 
+0

あなた自身の質問に答えます。 barは関数なので、bはbarにスコープされます。 fooには見えません。 fooにはバーだけが表示されますが、バーの内側にあるものはすべて表示されません。 – Shilly

答えて

3

barbの範囲はbar関数です。変数が表示されないの外に変数があります。つまり、すべての変数はグローバルスコープ/最外関数にすべて伝播するため、変数はグローバルに表示されます。それはまさにどの範囲が避けなければならないかです。

bは、スコープ機能でであり、barです。いいえfoo