1
我遵循蛇游戏教程。我将'snake_array.pop()'放在'paint()'函数的for循环中以查看会发生什么,并且我试图理解为什么会出现以下错误:JQuery for loop&array - 为什么这个变量未定义?
“Uncaught TypeError:无法读取属性'x'未定义“
我不明白为什么'x'是未定义的。 paint()for-loop的最后一次迭代使得c = snake_array [2],而snake_array [2]是{x:2,y:2}。那为什么它说x是不确定的?
$(document).ready(function(){
var canvas = $("#canvas")[0];
var ctx = canvas.getContext("2d");
var w = $("#canvas").width();
var h = $("#canvas").height();
ctx.fillStyle = "white";
ctx.fillRect(0, 0, w, h);
ctx.strokStyle = "black";
var snake_array;
create_snake();
function create_snake()
{
var length = 5;
snake_array = [];
for(var i = length - 1;i>=0;i--)
{
snake_array.push({x:i,y:2});
}
}
function paint()
{
for(var i=0; i < snake_array.length; i++)
{
var tail = snake_array.pop();
\t \t \t var c = snake_array[i];
\t \t \t ctx.fillStyle = "blue";
\t \t \t ctx.fillRect(c.x*10, c.y*10, 10, 10);
\t \t \t ctx.strokeStyle = "white";
\t \t \t ctx.strokeRect(c.x*10, c.y*10, 10, 10);
}
}
paint();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id="canvas" width="450" height="450"></canvas>
我要指出的一件事是,你从来没有使用变量尾 – hairmot
你在哪里定义x和y作为变量?你是说w和h? – Jeff
'snake_array.pop()'移除数组的最后一个元素。如果数组的长度在开头是1,那么你删除一个元素,并在尝试获取数组[0]后。但是数组[0]现在是未定义的。只需删除'var tail = snake_array.pop();'行即可 – Fefux