Javascript 调用函数时变量不更改
有人在我的代码中看到阻止变量“player1Bananas”更改的错误吗?函数中的其他所有内容都可以正常工作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
//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");