更新现有的javascript变量

时间:2012-07-15 17:48:15

标签: javascript

这可能是也可能不是一个简单的问题,因为我的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>

先发制人地感谢大家。我希望有一天我能有足够的技能在我的职位上将其回报给别人。

罗伯特

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

那是因为你shadowed变量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;
}

希望它有所帮助。

答案 2 :(得分:0)

在函数中传递参数库是不必要的。就这样做:

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

如果您将局部变量(您的参数)命名为bank,则它会隐藏全局变量bank。声明银行=银行 - 10;将仅应用于局部变量而不是全局变量。