我有一个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函数,但我认为包含它并不重要。
希望你能帮忙
答案 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。
查看引用传递,按值传递和变量范围。