javascript关闭错误

javascript关闭错误,javascript,closures,Javascript,Closures,我正在尝试执行setTimeout,将变量传递给在setTimeout内被调用的函数。在经历了一些最初的失败之后,我使用Google找到了一个描述如何使用闭包的网站。我基本上遵循了这个示例,但不断收到一条错误消息: 参数列表后缺少 setTimeout正在调用此错误消息,但据我所知,一切都已关闭。如有任何帮助,将不胜感激: var textureAtlas = new Image() function init() { textureAtlas.src = "images/text

我正在尝试执行setTimeout,将变量传递给在setTimeout内被调用的函数。在经历了一些最初的失败之后,我使用Google找到了一个描述如何使用闭包的网站。我基本上遵循了这个示例,但不断收到一条错误消息:

参数列表后缺少

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);

}

我不太清楚你想安排什么

我可以告诉您,setTimeout接受函数文本或函数引用,如下所示:

setTimeout(nameOfMyFunction, 1000); // reference -- note, NO parentheses here

setTimeout(function() { // literal -- the function being executed is "anonymous"
        /* body of function here */
    },
    1000);
在第一种语法中,需要注意两件事:

MyFunction的函数名通常必须在其他地方定义; 使用此语法,您不能将任何参数传递给nameOfMyFunction。 如果传递一些参数很重要,那么您可以将调用封装在一个匿名函数中,将它们传递进来,如下所示:

setTimeout(function() {
        nameOfMyFunction(someArg, otherArg);
    },
    1000);

现在还不清楚myFunction的用途。myFunction是否计划为动画制作准备绘图上下文?还是应该在设置动画之前进行其他一次性操作?

我不完全清楚您要安排什么

我可以告诉您,setTimeout接受函数文本或函数引用,如下所示:

setTimeout(nameOfMyFunction, 1000); // reference -- note, NO parentheses here

setTimeout(function() { // literal -- the function being executed is "anonymous"
        /* body of function here */
    },
    1000);
在第一种语法中,需要注意两件事:

MyFunction的函数名通常必须在其他地方定义; 使用此语法,您不能将任何参数传递给nameOfMyFunction。 如果传递一些参数很重要,那么您可以将调用封装在一个匿名函数中,将它们传递进来,如下所示:

setTimeout(function() {
        nameOfMyFunction(someArg, otherArg);
    },
    1000);
现在还不清楚myFunction的用途。myFunction是否计划为动画制作准备绘图上下文?还是应该在设置动画之前执行其他一次性操作?

替换:

var a = setTimeout(animate(){myFunction(ctx, textureAtlas, thisX, thisY); ctx=null, textureAtlas=null, thisX=null, thisY=null},1000);
    }

我不知道为什么在动画之后包含{…}?

替换:

var a = setTimeout(animate(){myFunction(ctx, textureAtlas, thisX, thisY); ctx=null, textureAtlas=null, thisX=null, thisY=null},1000);
    }

我不知道为什么在动画之后包含{…}?

尝试在setTimeout上添加单词函数:

尝试在setTimeout上添加word函数:

此外:

此处的上下文将抛出“undefined”,作为

var ctx = canvas.getContext('2d');
将仅在init范围内可用

严格来说,你不需要一个“;”在第一行之后:

var textureAtlas = new Image()
但是,这将是一个非常好的主意,请参见:

另外:

此处的上下文将抛出“undefined”,作为

var ctx = canvas.getContext('2d');
将仅在init范围内可用

严格来说,你不需要一个“;”在第一行之后:

var textureAtlas = new Image()


但是,这将是一个非常好的主意,请参见:

在setTimeout调用中,“animate”是一个输入错误吗?或者您正在尝试调用“animate”?animate之后的{…}有什么用?如果它有帮助的话,我正在使用这里给出的示例:我也是从这个页面引用的:在setTimeout调用中,“animate”是一个打字错误吗?或者你试图调用“animate”?animate之后的{…}有什么用?如果它有帮助的话,我正在使用这里给出的示例:我也在引用本页中的内容:以及其他我正在尝试在一个textureatlas上运行动画,animate函数将接收纹理图集上图像的x/y坐标和画布的参考以将其放置在其中。为了添加更多细节,我的理解可能是完全错误的,我在上面的评论中链接到的站点是,通过使用闭包,我将能够将变量传递给名为它的函数setTimeout-在本例中为animate,因为无法通过函数传递变量并将其作为第三个参数添加到setTimeout会在IE和其他方面引发问题。我正在尝试在textureatlas上运行动画,animate函数将接收纹理图集上图像的x/y坐标和画布的参考以将其放置在其中。为了添加更多细节,我的理解可能是完全错误的,我在上面的评论中链接到的站点是,通过使用闭包,我将能够将变量传递给名为它的函数setTimeout-在本例中为动画,因为您无法通过函数传递变量并将其作为第三个参数添加到setTimeout会在IE中引发问题。感谢您注意到缺少的;,这是我的一个输入错误。至于范围注释,我最初用这段代码进行了测试,结果很好:imgDrawctx,thisImg。。。函数imgDrawctx,thisImg{ctx.drawImagethisImg,0,0,1024,451,0,0,1024,451;}…你是说动画会抛出一个未定义的函数,因为它包含在setTimeout中吗?我确实想知道,实际上,闭包是一场噩梦,很少解释/记录,我认为它可能是可用的。闭包的问题在于,它们可能会因您意想不到的原因而起作用看起来你是对的,ctx是未定义的。我不熟悉闭包,我觉得我正在进入但丁的世界……我消除了setTimeout-var a=setTimeoutfunction{animatetextureAtlas,thisX,thisY;}中的错误
,400; 我误解了我引用的帖子……太好了,你会在不同的地方找到闭包——特别是在foreach循环中,人们想要改变自己正在迭代的东西。不要:谢谢你注意到失踪的人;,这是我的一个输入错误。至于范围注释,我最初用这段代码进行了测试,结果很好:imgDrawctx,thisImg。。。函数imgDrawctx,thisImg{ctx.drawImagethisImg,0,0,1024,451,0,0,1024,451;}…你是说动画会抛出一个未定义的函数,因为它包含在setTimeout中吗?我确实想知道,实际上,闭包是一场噩梦,很少解释/记录,我认为它可能是可用的。闭包的问题在于,它们可能会因您意想不到的原因而起作用看起来你是对的,ctx是未定义的。我不熟悉闭包,我觉得我正在进入但丁的世界……我摆脱了setTimeout-var a=setTimeoutfunction{animatetextureAtlas,thisX,thisY;},400;我误解了我引用的帖子……太好了,你会在不同的地方找到闭包——特别是在foreach循环中,人们想要改变自己正在迭代的东西。不要:我正在尝试将变量传递给animate我正在尝试将变量传递给animate我写的setTimeout错误:var a=setTimeoutfunction{animatetexturetaras,thisX,thisY;},400;我把setTimeout写错了:var a=setTimeoutfunction{animatetextureAtlas,thisX,thisY;},400;