2017-08-01 9 views
-2

この関数を実行するたびに、p1_Balanceは常に10にリセットされ、増分または減分の新しい値を保持しません。代わりに、それを関数がで呼び出されるたびに初期化する機能にリターン変数を、インクリメント/デクリメント後に新しい値を保持する方法は?

function Balance() { 
    var p1_Balance=10; 
    var x= Math.floor(10*Math.random()); 
    if (x<5) { 
    p1_Balance=p1_Balance-1; 
    } else { 
    p1_Balance=p1_Balance+1; 
    } 
    return p1_Balance; 
} 
+1

[スコープの詳細についてはこちらをご覧ください](https://stackoverflow.com/documentation/javascript/480/scope#t=20170801134516543515) – Nick

+1

@ruhul質問をする前に、いくつかの調査を行うことができます。 – Nick

答えて

0

パスp1_Balancevar p1_Balance = 10;

0

いくつかの解決策が考えられます: 1は、グローバル変数としてp1_Balanceを宣言しています。

var p1_Balance=10; 
function Balance(){ 

var x= Math.floor(10*Math.random()); 
if (x<5) { 
    p1_Balance=p1_Balance-1; 
} 
else { 
    p1_Balance=p1_Balance+1; 
} 
return p1_Balance; 
} 

別のあなたが関数のパラメータとしてのバランスを渡すことができます:

function Balance(p1_Balance){ 

var x= Math.floor(10*Math.random()); 
if (x<5) { 
    p1_Balance=p1_Balance-1; 
} 
else { 
    p1_Balance=p1_Balance+1; 
} 
return p1_Balance; 
} 

..... 

value = Balance(10);// value=something that you want to change by that function. 
0

p1_Balanceは、関数(関数自体の中ではないという意味)の範囲外で宣言されなければなりません。それ以外の場合は、関数が呼び出されるたびに値を10に設定するイニシャライザも実行されます。

var p1_Balance=10; 
function Balance(){ ... 
0

あなたは以下を参照することができますように、あなたが望むものを行う関数を作成するためにJavascript closuresを使用することができます。

また

var Balance = (function() { 
 
    var p1_Balance = 10; 
 
    return function() { 
 
    var x = Math.floor(10 * Math.random()); 
 
    if (x < 5) 
 
     return p1_Balance += 1; 
 
    else 
 
     return p1_Balance -= 1; 
 
    }; 
 
})(); 
 

 
for (var i = 0; i < 10; i++) 
 
    console.log(Balance());

を、あなたはp1_Balance変数を定義する必要があります。関数の外部に置くか、引数として渡します。

関連する問題