Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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 调用函数时变量不更改_Javascript_Variables - Fatal编程技术网

Javascript 调用函数时变量不更改

Javascript 调用函数时变量不更改,javascript,variables,Javascript,Variables,有人在我的代码中看到阻止变量“player1Bananas”更改的错误吗?函数中的其他所有内容都可以正常工作 //update playerStats arguments: //banana is a banana object //x and y are the banana's position //players bananas is player1Bananas or player2Bananas, //ballPosition is "left" or

有人在我的代码中看到阻止变量“player1Bananas”更改的错误吗?函数中的其他所有内容都可以正常工作

 //update playerStats arguments:
    //banana is a banana object
    //x and y are the banana's position
    //players bananas is player1Bananas or player2Bananas,
    //ballPosition is "left" or "right"
    updatePlayerStats: function(banana, x, y, playersBananas, ballPosition) {   
        playersBananas += 1;
        gameController.bananasTaken += 1;
        banana.x = x;
        banana.y = y;
        gameController.player1Score = 0;
        gameController.player2Score = 0;
        gameController.setUpPaddles();
        gameController.setUpBall(ballPosition);
    },
    gameController.updatePlayerStats( gameController.Banana1, 20, gameController.canvas.height - 20 - gameController.Banana1.height,
 gameController.player1Bananas, "left");

谢谢

因为在JavaScript中,数字是通过值传递的


您必须传递的不是单个数字,例如玩家状态对象({id:1,bananas:17})。

您传递的是
gameController.player1bananas的

在函数中,该值被分配给局部变量
playersBananas
,并受范围的限制。当您对其进行更改时,您不再对最初传递的变量进行更改,而是对新变量
playerspanana
进行更改

例如:

要解决此问题,需要将其作为对象传递。JavaScript不会将其作为值传递,而是传递对象本身


示例:

player1Bananas
更改为全局变量,然后在函数中更改相同的
player1Bananas

gameController.player1Bananas是一种基本类型,因此它通过值传递。。。不是参考资料。这意味着在函数PlayerBanas中不再有对player1Bananas的任何引用,它只是一个整数值

请尝试传入一个对象。。。例如,可以有一个具有bananaCount属性的player对象。然后将player对象传递到函数中,并增加player对象的bananaCount属性

例如


请参阅此链接以获得良好的解释

原因函数通过值获取它。阅读:我建议您创建访问器函数来抽象一些代码。您只需调用
gameController.giveBanana()
,这将增加
bananasaked
playersbanana
。如果您以后更改变量名或进行任何其他更改,它将对您有所帮助。@Jazza这是一个非常好的主意,谢谢。谢谢,我现在知道哪里出了问题。谢谢,我现在正在这样做。谢谢,我认为这个解决方案是我游戏的最佳方式。
 //update playerStats arguments:
    //banana is a banana object
    //x and y are the banana's position
    //players bananas is player1Bananas or player2Bananas,
    //ballPosition is "left" or "right"
    updatePlayerStats: function(banana, x, y, player, ballPosition) {   
        player.bananaCount += 1;
        gameController.bananasTaken += 1;
        banana.x = x;
        banana.y = y;
        gameController.player1Score = 0;
        gameController.player2Score = 0;
        gameController.setUpPaddles();
        gameController.setUpBall(ballPosition);
    },
    gameController.updatePlayerStats( gameController.Banana1, 20, gameController.canvas.height - 20 - gameController.Banana1.height,
 gameController.player1, "left");