ошибка закрытия JavaScript - PullRequest
       11

ошибка закрытия JavaScript

1 голос
/ 09 августа 2011

Я пытаюсь сделать 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);

}

Ответы [ 4 ]

2 голосов
/ 09 августа 2011

Я не совсем понимаю, что вы пытаетесь запланировать, здесь.

Я могу вам сказать, что 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.

Если важно передать некоторые аргументы, вы можете заключить вызов в анонимную функцию, которая передает их, например:

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

И не ясно, для чего myFunction.По вашему плану myFunction готовит контекст рисования для использования animate?Или это какая-то другая одноразовая операция, которая должна произойти до animate?

1 голос
/ 09 августа 2011

Также:

function animate() { 

    ctx.drawImage(thisImg,thisX,thisY, 1024, 451, 0, 0, 1024, 451);

}

В данном контексте будет выбрано значение «неопределенное», поскольку

var ctx = canvas.getContext('2d');

будет доступно только в области инициализации.

Вам не нужно строго ';'после первой строки:

var textureAtlas = new Image()

Однако это было бы очень хорошей идеей, см .: требует ли javascript ';'в конце строки кода?

1 голос
/ 09 августа 2011

Попробуйте добавить слово function на setTimeout:

        var a = setTimeout(function animate() {
            myFunction(ctx, textureAtlas, thisX, thisY);
            ctx = null, textureAtlas = null, thisX = null, thisY = null
        }, 1000);
0 голосов
/ 09 августа 2011

Заменить:

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

К

var a = setTimeout(animate, 1000);

Не знаю, почему вы включили (){...} после animate?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...