使Javascript函数的问题与参数一起工作

时间:2014-12-17 11:04:32

标签: javascript function parameters

我有一个Javascript问题,这可能很明显,但我似乎无法找到解决方案,而且我也不知道如何解决它。

(另外,我对编码还很陌生)

所以我在游戏中为正方形写了一个巡逻功能,现在我开始只是让方块移动一个方向。稍后我会让它来回巡逻。这就是我将移动功能放在绘图功能中的原因。

我希望移动功能可以重复使用几个方格,但我似乎无法使一般移动功能起作用。但是,我可以专门为某个方格做一个移动功能。

任何人都可以告诉我为什么会这样:

var square = 16;
var posX = 32;
var posY = 32;

function moveSquare() {
    for (i = 0; i < 10; i++) {
        posX++;
    }
}

function draw() {
    var redSquare = { x: posX, y: posY, w: square, h: square, color: "red" };
    ctx.fillStyle = redSquare.color;
    rect(redSquare.x,redSquare.y,redSquare.w,redSquare.h);

    moveSquare();
}

这并不是:

var square = 16;
var posX = 32;
var posY = 32;

function move(pos) {
    for (i = 0; i < 10; i++) {
        pos++;
    }
}

function draw() {
    var redSquare = { x: posX, y: posY, w: square, h: square, color: "red" };
    ctx.fillStyle = redSquare.color;
    rect(redSquare.x,redSquare.y,redSquare.w,redSquare.h);

    move(posX);
}

顺便说一下,我在其他地方定义了rect函数,但我认为包含它并不重要。

希望你能帮忙

1 个答案:

答案 0 :(得分:1)

传递给函数move的值是按值传递的,而不是通过引用传递的。

所以pos内部移动对移动功能是私有的。

pos变量将是posX的副本,因此无论你在移动函数中对它做什么,全局posX都不会受到影响。

考虑代码:

var x = 5;

function move(x)
{
  x++;
  console.log("In function x is: " + x);
}

console.log("Outside function, before call x is: " + x);

move(x);

console.log("Outside function, after call x is: " + x);

输出:

"Outside function, before call x is: 5"
"In function x is: 6"
"Outside function, after call x is: 5"

函数move拥有它自己的私有副本x。

查看引用传递,按值传递和变量范围。