调用函数时变量不变

时间:2013-07-30 06:46:05

标签: 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 "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");

谢谢!

4 个答案:

答案 0 :(得分:5)

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

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

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

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

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

答案 1 :(得分:2)

因为在JavaScript中数字是按值传递的......

你必须传递除了单个数字之外的其他内容,例如玩家状态对象(例如{id:1,香蕉:17})。

答案 2 :(得分:1)

gameController.player1Bananas是一种基本类型,因此它通过值...而不是引用传递。这意味着函数内部的playerBananas不再具有对player1Bananas的任何引用,它只是一个整数值。

尝试传入一个对象...例如,你可以拥有一个带有bananaCount属性的玩家对象。然后将播放器对象传递给函数并增加播放器对象的bananaCount属性。

例如

 //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");

请参阅此链接以获取更好的解释.. http://snook.ca/archives/javascript/javascript_pass

答案 3 :(得分:0)

player1Bananas更改为全局变量,然后在函数

中更改相同的player1Bananas