无法更新函数中的所有变量

时间:2013-11-22 21:29:40

标签: javascript jquery

这是我的JS:

var money = 4;
var thirst = 50;
function satisfy(what,how,price,sBar){
    if(price<=money){
        what=what+how;
        money=money-price;
        updateBar(sBar,what);
        updateMoney();
    } else {
        log.unshift("D"+day+" "+hour+":"+minute+" - Poor hobo, you don't have enough money for that. <br>");
        updateLog();
    };
};

这是我的HTML

<a onClick="satisfy(thirst,30,0.84,'#thirst')";>buy</a>

点击它后,问题是thirst的全局变量没有更新,但money全局变量确实更新了。如何修复它以使thirst全局变量也更新?

非常感谢你。

3 个答案:

答案 0 :(得分:1)

这是因为JavaScript编号是通过传递的,而不是通过参考传递的,这意味着创建并修改了thirst的副本。为什么不改为返回一个值:

HTML:

<a id="buy-link">buy</a>

JavaScript的:

var money = 4;
var thirst = 50;

function satisfy(what, how, price, sBar) {
    if (price <= money){
        what += how;
        money -= price;
        updateBar(sBar,what);
        updateMoney();
    } else {
        log.unshift("D" + day + " " + hour + ":" + minute + " - Poor hobo, you don't have enough money for that. <br>");
        updateLog();
    }

    return what;
}

var buyLink = document.getElementById("buy-link");
buyLink.addEventListener("click", function() {
    thirst = satisfy(thirst, 30, 0.84, '#thirst')
}, false);

我还删除了一些不需要的分号,将事件处理程序转换为使用标准addEventListener函数,并清理了一些代码。

答案 1 :(得分:1)

如果您必须“通过引用传递”,则可以传递一个对象,然后修改该函数内的内容。

var money = 4,
    thirst = 50,
    myObj = {
      what: 'thirst',
      how: 30,
      price: 0.84,
      sBar: '#thirst'
    }

function doSomething(obj) {
   obj.what = 'hunger';
   obj.how = 20;
}

doSomething(myObj);
console.log(myObj.what); // "hunger"

答案 2 :(得分:0)

添加

口渴=什么;

后:

updateMoney();

然而,由于您将其用作参数,我怀疑您计划将除“口渴”之外的其他变量传递给函数

在这种情况下,只需传递一个字符串,如“口渴”。然后在你的函数中有类似

的东西
if (what=="thirst")
      thirst=what;
if (what=="hunger")
      hunger= what;