2017-10-10 7 views
0

私は、outerfuncを呼び出した後、答えの価値がどのようになるのだろうと思っています。その背後にある理由に特に興味があります(例:innerfuncの戻り値が、グローバルスコープ内のvar xに格納された値を置き換えない理由)。ありがとうございます!resultの値は何ですか?

var x = 10; 

function outerfunc() { 
    x = 20; 
    function innerfunc() { 
    var x = x + 20; 
    return x; 
    } 
    innerfunc(); 
} 

outerfunc(); 

var answer = x; 
+0

あなたはそれを試みることができる参照してください[OK]をしかし、すぐinnerfuncが呼び出されると、なぜinnerfunc wouldntの – Thilo

答えて

1

Reグローバルファンクションのvar xに格納されている値を内部関数の戻り値で置き換えないのはなぜですか?

innerfuncの中にxという新しいvarを作成したためです。 var x = x + 20行からvarを削除してみてください。

+0

最も近いxのを探し始めます外側のスコープ、この場合x = 20? – JeroenT

+0

innerfunc内のvarステートメントを使用すると、innerfuncのスコープ内にあるxという新しい変数が作成されます。このコードでは、innerfuncの外側を検索する必要はありません。要するに、2つの完全に別々の変数を作成しました。あなたが見ている混乱は、それらを同じ名前にしたからです。提案されているようにvarを削除すると、innerfuncはxの外側スコープのインスタンスを見つけます。 –

+0

スーパークリス、ありがとう – JeroenT

0

グローバル変数と同じ名前のローカル変数を宣言すると、グローバル変数はその関数では非表示になります。

function innerfunc() { 
    var x = x + 20; // here there is no global x. so it is NaN 
    return x; 
} 

...これは

var x = 10; 
 

 
function outerfunc() { 
 
x = 20; 
 
function innerfunc() { 
 
    var x = x + 20; 
 
    alert("value of x in innerFun " + x); 
 
} 
 
innerfunc(); 
 
} 
 
outerfunc(); 
 
alert("global value of x is " + x);

関連する問題