在函数(javascript)中更改全局变量时遇到问题。如何更改cardValue?
我在试着做一副扑克牌。这是它的短代码。我只是在努力学习,所以对我的代码要温柔 所以我想为玩家手中的牌创造一个总价值。每次我尝试调用此函数来更改cardValue时,它似乎不会在全局范围内更改任何内容在函数(javascript)中更改全局变量时遇到问题。如何更改cardValue?,javascript,arrays,function,Javascript,Arrays,Function,我在试着做一副扑克牌。这是它的短代码。我只是在努力学习,所以对我的代码要温柔 所以我想为玩家手中的牌创造一个总价值。每次我尝试调用此函数来更改cardValue时,它似乎不会在全局范围内更改任何内容 let cardValue = 0; let cardDeck = []; for (i=1; 52 >= i; i++) { cardDeck.push(i); }; let card1 = ((Math.random()*52)-1); card1 = Math.floor(c
let cardValue = 0;
let cardDeck = [];
for (i=1; 52 >= i; i++) {
cardDeck.push(i);
};
let card1 = ((Math.random()*52)-1);
card1 = Math.floor(card1);
card1 = cardDeck.splice(card1, 1);
let card2 = ((Math.random()*51)-1);
card2 = Math.floor(card2);
card2 = cardDeck.splice(card2, 1);
function cardTotal(foo, bar) {
if (3 >= foo) {
bar =+ 11;
} else if (7 >= foo) {
bar =+ 2;
} else if (11 >= foo) {
bar =+ 3;
} else if (15 >= foo) {
bar =+ 4;
} else if (19 >= foo) {
bar =+ 5;
} else if (23 >= foo) {
bar =+ 6;
} else if (27 >= foo) {
bar =+ 7;
} else if (31 >= foo) {
bar =+ 8;
} else if (35 >= foo) {
bar =+ 9;
} else if (39 >= foo) {
bar =+ 10;
} else if (43 >= foo) {
bar =+ 10;
} else if (47 >= foo) {
bar =+ 10;
} else {
bar =+ 10;
}
}
cardTotal(card1, cardValue);
cardTotal(card2, cardValue);
console.log(cardValue); // returns 0
JavaScript函数通过值而不是引用接收原语。当函数
cardTotal
接收到值bar
作为其参数之一时,落入else
块中,只会更改cardTotal
的bar
局部值;但是请记住,由于它是一个原语(一个数字
),它是通过值传递的,因此该函数只有cardValue
的值,而不是对它的引用
稍微好一点:在cardTotal
中,只取一个参数(card1
或card2
),并从函数内部直接修改cardValue
,即:
if(3>=foo){
cardTotal+=11;//将11添加到cardTotal
}否则{
...
更好的方法是:让cardTotal
在它的末尾返回一个值。这样,cardTotal
仍然接受两个值。在函数范围内修改它的局部值,然后将该值返回到函数之外
因此,cardTotal的最后一行应该是返回栏;
然后,可以将代码段的最后几行更改为:
cardValue=cardTotal(card1,cardValue);
console.log(cardValue);
cardValue=cardTotal(card2,cardValue);
console.log(cardValue);
语法应该是+=
而不是=+
我想对多个播放器重复使用cardTotal,因此需要kep 2个值。即使在函数末尾返回bar
也不会改变全局变量听起来你想返回bar,所以你可以将每个播放器的更新值存储在另一个变量中可能可以吗?除非将调用cardTotal函数的结果赋给全局变量,否则返回条不会更改全局变量。因此,我必须生成一些其他全局变量,使其成为bee=return bar;
?非常感谢您的帮助,尽管我刚刚设置了一个新的全局变量,并生成了函数bee+=bar
。非常好。再次感谢您的帮助。乐于帮助!!