我有一个像这样松散的javascript函数:
var usedNums= new Array(76);
function setSquare(thisSquare)
{
var currSquare = "square"+ thisSquare;
var colPlace = new Array(0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4);
var colBasis = colPlace[thisSquare] * 15;
var newNum;
do{
newNum = colBasis + getNewNum() + 1;
}while(usedNums[newNum]); //UnCaught TypeError here
usedNums[newNum] = true;
document.getElementById(currSquare).innerHTML = newNum;
}
错误说:
无法读取未定义的属性“5”。
我已经使用console.log语句进行了检查,并且上面的所有变量都获得了预期值。
我理解什么是类型错误但不确定它在哪里破坏。
**编辑:**这是完整的脚本:
window.onload = new newCard;
var usedNums= new Array(76);
function newCard()
{
if(document.getElementById){
for(var i =0; i<24;i++)
{
console.log("Value of I is " + i);
setSquare(i);
}
}else{
alert("Sorry, your browser does not support this script");
}
}
function setSquare(thisSquare)
{
console.log("thissquare" + thisSquare);
var currSquare = "square"+ thisSquare;
console.log("currsquare" + currSquare);
var colPlace = new Array(0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4);
console.log("colplace" + colPlace);
var colBasis = colPlace[thisSquare] * 15;
console.log("colbasis"+ colBasis);
var newNum;
do{
newNum = colBasis + getNewNum() + 1;
console.log("new nUM" + newNum);
}while(usedNums[newNum]);
usedNums[newNum] = true;
document.getElementById(currSquare).innerHTML = newNum;
}
function getNewNum()
{
var a = Math.floor(Math.random() * 15);
console.log("random number" + a);
return a;
}
答案 0 :(得分:1)
这一行:
window.onload = new newCard;
是:
newCard
作为构造函数(它不是)onload
由于您在那里调用newCard
,因此它会在您到达下一行之前运行:
var usedNums= new Array(76);
因此,当您尝试从中读取时,usedNums
未定义。
您需要指定newCard
功能作为加载处理程序。所以不要调用它:
window.onload = newCard;