这是我的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
全局变量也更新?
非常感谢你。
答案 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;
等