Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在函数(javascript)中更改全局变量时遇到问题。如何更改cardValue?_Javascript_Arrays_Function - Fatal编程技术网

在函数(javascript)中更改全局变量时遇到问题。如何更改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

我在试着做一副扑克牌。这是它的短代码。我只是在努力学习,所以对我的代码要温柔

所以我想为玩家手中的牌创造一个总价值。每次我尝试调用此函数来更改cardValue时,它似乎不会在全局范围内更改任何内容

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
。非常好。再次感谢您的帮助。乐于帮助!!