日期:2014-05-16  浏览次数:20380 次

为什么是undefined,这跟我想的一点都不一样啊。
我想在一个7*7的格子里随机显示8张图片,要怎么弄啊。。。。。

HTML code

<!DOCTYPE html>
<html>
<head><title>Game</title>
<script type="text/javascript" src="xxxx.js"></script>
<meta http-equiv="Cache-Control" content="no-cache"/>
</head>
<body onload="draw();">
<canvas id="canvas" width="800" height="800"></canvas>
</body>
</html>



JScript code

function draw(){
    var canvas=document.getElementById("canvas");
    var context=canvas.getContext("2d");
    var x,y,i,j,k;
    var a=Array("0001.png","0002.png","0003.png","0004.png","0005.png","0006.png","0007.png","0008.png");
    var img=new Image();
    for(k=0;k<8;k++){
        img.src=a[k];
        img.onload=function(){
            i=Math.random()*7;
            j=Math.random()*7;
            x=114*i+21;
            y=114*j+21;
            alert(a[k]); //为什么a[k]值为undefined未定义??
            context.drawImage(img,x,y);
        }
    }
}



[八张图片]









------解决方案--------------------
var a=Array应该是这样吧var a=new Array()或者直接var a=[];
------解决方案--------------------
好像楼上说的对
------解决方案--------------------
Array可是个类哟,需要通过new来实例化的,如:
var a = new Array("0001.png","0002.png","0003.png","0004.png","0005.png","0006.png","0007.png","0008.png");
------解决方案--------------------
必须new
直接Array()是调用函数的写法,Array()函数没有返回值,所以就undefind了
------解决方案--------------------
var a=["0001.png","0002.png","0003.png","0004.png","0005.png","0006.png","0007.png","0008.png"];
------解决方案--------------------
html5不熟
------解决方案--------------------
var img=new Image();
for(k=0;k<8;k++){
img.src=a[k];
把var img = new Image()放到for循环的里面吧。

for(k=0;k<8;k++){
var img=new Image();
img.src=a[k];

------解决方案--------------------
var a=["0001.png","0002.png","0003.png","0004.png","0005.png","0006.png","0007.png","0008.png"];
 
for(k=0;k<8;k++){
 var img=new Image();

img.onload=function(){
i=Math.random()*7;
j=Math.random()*7;
x=114*i+21;
y=114*j+21;
alert(this.src); //为什么a[k]值为undefined未定义??
context.drawImage(this,x,y);
};
 img.src=a[k];
}
------解决方案--------------------
=.=这一片红星星亮瞎了我的眼

典型的闭包问题,由于无意间形成闭包,导致这样的错误

楼主的原始代码主要有这两个问题:
1.由于闭包导致当onload执行时,
JScript code

alert(a[k]); //为什么a[k]值为undefined未定义??

------解决方案--------------------