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还定义了相同的变量库。这将覆盖您在该函数的脚本顶部定义的变量 bank。

有两种选择:您可以完全删除函数的银行变量或更改其名称。对于您正在使用的内容,我将其删除。

将您的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 回答