2017-05-29 5 views
3

このコードは、出力をゼロに記録します。出力6.JavaScriptが「0」を記録するのはなぜですか?

function sum(a,b){ 
 
    r=a+b; 
 
    return r; 
 
} 
 

 
r=sum(2,9); 
 
r1=sum(1,4); 
 
diff=r-r1; 
 

 
console.log(diff);

+0

ここで、rを宣言していますか?おそらく関数の範囲外だと思われますので、sumを呼び出すとrを上書きします。したがって、あなたは、 '' 'R = 5'に上書きr'is呼び出すsum' 2番目のをやってそうでないときは、すべてのあなたの' r'変数を宣言する必要があり、それ自体から同じ値を減算し、0 – Christopher

+1

を取得しています – Lixus

答えて

6

rでグローバルに宣言され、同じ変数と見なされます関数外の変数:

function sum(a,b){ 
    var r=a+b; 
    return r; 
} 

これは役立ちます。あなたは変数を宣言する場合varを使用する必要が

function sum(a,b){ 
 
    var r=a+b; 
 
    return r; 
 
} 
 

 
r=sum(2,9); 
 
r1=sum(1,4); 
 
diff=r-r1; 
 

 
console.log(diff);

2

rなければならない内部とsumの外側の両方に言及されます。それはローカル変数ではありませんが、関数の外部に存在します。 sumを呼び出すと、以前の値rが上書きされます。特に

r1=sum(1,4);5rr1の両方を設定し、そうdiffは次に0であろう。あなたが他のfucntionの内側とlocalY r変数を宣言するときに、関数内スコープの競合rがあるでしょうvarキーワードを使用するようにしました

4

varを使用しないと、暗黙的にグローバル変数が作成されます。

function sum(a,b){ 
    r=a+b; // This ends up being a reference to the same `r` as below 
    return r; 
} 

r=sum(2,9); // This creates a global variable called r and sets it to 11 
r1=sum(1,4); // This sets global `r` to 5 (because of the r=a+b in sum() 
diff=r-r1; // 5 - 5 is 0 
console.log(diff); 

は、代わりにこれを行う:あなたはVaRのkeyword.Soと

関数内の変数rが、それがグローバルスコープであると宣言されていないため

function sum(a,b){ 
    var r=a+b; // Now this r is local to the sum() function 
    return r; 
} 

var r=sum(2,9); // Now this r is local to whatever scope you are in 
var r1=sum(1,4); 
var diff=r-r1; 
console.log(diff); 
0

これがあります。

このR1 = SUM(1,4)を行っている場合、Rの値は

5にオーバーライドされると、R1の値は、R-r1が

オンの差5.Soも

はアウトこれを避けるために0

であることを、あなたは、関数内でRを宣言するためにvarキーワードを使用することができます。

function sum(a,b){ 
    var r=a+b; 
    return r; 
} 

r=sum(2,9); 
r1=sum(1,4); 
diff=r-r1; 

console.log(diff); 

これは役に立ちます。

関連する問題