javascript关闭错误

时间:2011-08-09 15:45:29

标签: javascript closures

我正在尝试执行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);

}

4 个答案:

答案 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