2

私は JavaScript のスキルが非常に限られているため、これは簡単な質問かもしれませんし、そうでないかもしれません。私がやりたいのは、関数内の変数を変更してから、関数で再び使用できる新しい変数値を返すことだけです。

この例として、クリックするたびに変数から 10 ポイントを差し引く単純なボタンがあります。クリックするたびに段階的なカウントダウンのように。問題は、変数が返されるたびに更新されないことです。

たぶん、javascriptへの私の最初のアプローチがうまくいかないので、これについて多くを知ることができないようです. ここにコードがあります

<html>
<head>
<script type="text/javascript">

/*starting bank account*/
var bank = "200";
/* i want this function to deduct ten from the starting bank account and update the bank variable */
function Bank(bank) {
    var printout = document.getElementById("display_bank_result_here");
    bank = bank - 10;
    printout.innerHTML = bank;
    return bank;
}


</script>
</head>
<body>
<button onclick="Bank(bank)">remove 10 from bank</button>
<p id='display_bank_result_here'></p>
</body>
</html>

そこにいるすべての人に先制的に感謝します。いつの日か、私の立場にある他の誰かに恩返しをするのに十分なスキルを身に付けたいと思っています.

ロバート

4

3 に答える 3

1

これはスコープが原因です。スコープは、変数とメソッドが定義/配置される場所を定義します。

関数内のすべては、その特定の関数のスコープ内にあります。関数Bankは、同じ変数バンクも定義します。これは、その関数のスクリプトの先頭で定義した変数バンクをオーバーライドします。

2つのオプションがあります。関数のバンク変数を完全に削除するか、その名前を変更することができます。あなたが使用しているものについては、私はそれを削除します。

Bank関数をこれに変更します

function Bank ()
{
    var printout=document.getElementById("display_bank_result_here");
    bank=bank-10;
    printout.innerHTML =bank;
    // You don't need to return it as it is changed inside the function
}
于 2012-07-15T17:56:12.193 に答える
1

これは、変数をシャドウbankしたためです。

関数Bankでは、bank変数はグローバル変数ではなくローカル変数を参照しています。return関数の値を使用してグローバル変数を更新するとすぐに、これは問題にはなりません。

<button onclick="bank = Bank(bank)">remove 10 from bank</button>

もちろん、シャドウイングを回避して解決することもできます。たとえば、次のようになります。

function Bank () {
    var printout=document.getElementById("display_bank_result_here");
    bank -= 10;

    printout.innerHTML =bank;
}

その後、returnは必要ありません。

また、グローバル変数をまったく回避してprintout、開始値を入力することもできます。

<button onclick="decreaseBank()">remove 10 from bank</button>
<p id='display_bank_result_here'>200</p>

そして、JSは次のようになります。

function decreaseBank () {
    var printout = document.getElementById("display_bank_result_here");

    // with subtraction the value of `innerHTML` will be converted in Number
    // automatically.
    var bank = printout.innerHTML - 10;

    printout.innerHTML = bank;
}

それが役に立てば幸い。

于 2012-07-15T17:59:37.500 に答える
0

関数にパラメータバンクを渡す必要はありません。これを行うだけです:

function Bank() {
    var printout = document.getElementById("display_bank_result_here");
    bank = bank - 10;
    printout.innerHTML = bank;
}

ローカル変数(パラメーター)バンクに名前を付けると、グローバル変数バンクが非表示になります。ステートメントbank=bank-10; グローバル変数ではなく、ローカル変数にのみ適用されます。

于 2012-07-15T17:51:24.003 に答える