【问题标题】:Having trouble changing the global variable from within a function (javascript). How can I change cardValue?无法从函数 (javascript) 中更改全局变量。如何更改cardValue?
【发布时间】:2020-01-30 00:26:29
【问题描述】:

我正在尝试构建一副扑克牌。这是它的简码。我只是在努力学习,所以对我的代码要温柔。

所以我想为玩家手中的牌创造一个总价值。每次我尝试调用此函数来更改 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 arrays function


【解决方案1】:

JavaScript 函数通过值而不是引用接收原语。当您的函数cardTotal 接收值bar 作为其参数之一时,落入您的else 块之一只会更改cardTotalbar 的本地值;但请记住,因为它是一个原始的(number),它是按值传递的,所以该函数只有cardValue 的值,而不是对它的引用。

略好:在cardTotal内部,只取一个参数(card1card2),直接在函数内部修改cardValue,即:

  if (3 >= foo) {
    cardTotal += 11; // Add 11 to cardTotal
  } else {
  ...

更好:让cardTotal 在其末尾返回一个值。这样,cardTotal 仍然需要两个值。在函数作用域内修改其本地值,然后将 return 该值移出函数。

所以,cardTotal 的最后一行应该是return bar;

那么你的代码sn-p的最后几行可以改成:

cardValue = cardTotal(card1, cardValue);
console.log(cardValue);
cardValue = cardTotal(card2, cardValue);
console.log(cardValue);

【讨论】:

  • 我想为多个玩家重复使用 cardTotal,所以需要保留 2 个值。即使在函数末尾返回bar 也不会改变全局变量
  • 听起来你会想要返回 bar,所以你可以将每个玩家的更新值存储在另一个变量中?返回 bar 不会改变全局变量,除非你将调用 cardTotal 函数的结果赋值给全局变量。
  • 所以我必须创建一些其他全局变量并使其成为bee = return bar;?非常感谢您的帮助
  • 好的,我刚刚设置了一个新的全局变量并创建了函数bee += bar。效果很好。再次感谢您的帮助
  • 乐于助人!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多