我正在尝试执行setTimeout,其中我将变量传递给setTimeout()中正在调用的函数。经过一些初步的失败然后使用谷歌我找到了一个网站,描述了如何使用闭包。我几乎跟着这个例子,但我一直收到一条错误信息:
参数列表 后缺失)
在setTimeout上调用此错误消息,但据我所知,所有内容都已关闭。任何帮助将不胜感激:
var textureAtlas = new Image()
function init() {
textureAtlas.src = "images/textureatlast1.png";
var textureAtlasCoords = new Array("0,0", "100,0", "200,0", "300,0", "400,0", "500,0", "600,0");
var canvas = document.getElementById('textureAtlas');
if (canvas.getContext){
var ctx = canvas.getContext('2d');
for(var c=0; c<textureAtlasCoords.length; c++) {
var thisCoord = textureAtlasCoords[c];
var thisCoordSplit = thisCoord.split(",");
var thisX = thisCoordSplit[0];
var thisY = thisCoordSplit[1];
var a = setTimeout(animate(){myFunction(ctx, textureAtlas, thisX, thisY); ctx=null, textureAtlas=null, thisX=null, thisY=null},1000);
}
} else {
alert("Looks like your browser doesn't support HTML5");
}
}
function animate() {
ctx.drawImage(thisImg,thisX,thisY, 1024, 451, 0, 0, 1024, 451);
}
答案 0 :(得分:2)
我不清楚你在这里安排的是什么。
我可以告诉你,setTimeout采用函数文字或函数引用,如下所示:
setTimeout(nameOfMyFunction, 1000); // reference -- note, NO parentheses here
setTimeout(function() { // literal -- the function being executed is "anonymous"
/* body of function here */
},
1000);
在第一种语法中,重要的是要注意两件事:
nameOfMyFunction
必须在其他地方正常定义; nameOfMyFunction
。如果传递一些args很重要,那么你可以将调用包装在一个传递它们的匿名函数中,如下所示:
setTimeout(function() {
nameOfMyFunction(someArg, otherArg);
},
1000);
目前尚不清楚myFunction
的用途。您的计划myFunction
是否准备了animate
使用的绘图上下文?或者是否应该在animate
之前发生一些其他的一次性操作?
答案 1 :(得分:1)
尝试在function
上添加setTimeout
一词:
var a = setTimeout(function animate() {
myFunction(ctx, textureAtlas, thisX, thisY);
ctx = null, textureAtlas = null, thisX = null, thisY = null
}, 1000);
答案 2 :(得分:1)
此外:
function animate() {
ctx.drawImage(thisImg,thisX,thisY, 1024, 451, 0, 0, 1024, 451);
}
这里的上下文将抛出'undefined',作为
var ctx = canvas.getContext('2d');
只能在init的范围内使用。
你不需要';'在第一行之后:
var textureAtlas = new Image()
但是,这是一个非常好的主意,请参阅:does javascript require ';' at the end of a line of code?
答案 3 :(得分:0)
替换:
var a = setTimeout(animate(){myFunction(ctx, textureAtlas, thisX, thisY); ctx=null, textureAtlas=null, thisX=null, thisY=null},1000);
}
通过
var a = setTimeout(animate, 1000);
我不知道你为什么在(){...}
之后加入animate
?