首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量在调用函数时不更改

变量在调用函数时不更改
EN

Stack Overflow用户
提问于 2013-07-30 06:46:05
回答 4查看 64关注 0票数 0

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

代码语言:javascript
复制
 //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");

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-30 06:56:08

gameController.player1Bananas是一个基本类型,因此它是通过值传递的.不是推荐信。这意味着在函数playerBananas中不再有对player1Bananas的任何引用,它只是一个整数值。

试着输入一个物体.例如,可以使用带有bananaCount属性的player对象。然后将player对象传递到函数中,并增加player对象的bananaCount属性。

例如:

代码语言:javascript
复制
 //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");

请参阅这个链接以获得一个好的解释。pass

票数 1
EN

Stack Overflow用户

发布于 2013-07-30 06:51:54

您正在将 of gameController.player1bananas作为参数传递给函数。

在函数中,该值被赋值给局部变量playersBananas,并受到作用域的限制。当您对它进行更改时,您不再对最初传递的变量进行更改,而是对新变量playersBananas进行更改。

示例:http://jsfiddle.net/GHkJ6/

要解决这个问题,您需要将它作为一个对象传递。JavaScript不会将它作为值传递,而是传递对象本身。

示例:http://jsfiddle.net/F446Q/

票数 5
EN

Stack Overflow用户

发布于 2013-07-30 06:49:36

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

您必须传递单个数字以外的其他内容,例如player state对象({id:1,香蕉:17})。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17940028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档