web-dev-qa-db-ja.com

breakステートメントの違法な使用; javascript

この変数が一定量になると、ループを停止したいのですが、「Uncaught SyntaxError:Illegal break statement」というエラーが表示され続けます。

function loop() {
    if (isPlaying) {
        jet1.draw();
        drawAllEnemies();
        requestAnimFrame(loop);
        if (game==1) {

            break;

        }

    }
} 
34
lehermj

break は、for、while、switchなどのループから抜け出します。ここにはありません。現在の関数の実行フローを中断するには、returnを使用する必要があります。呼び出し元に戻ります。

function loop() {
    if (isPlaying) {
        jet1.draw();
        drawAllEnemies();
        requestAnimFrame(loop);
        if (game == 1) {
           return
        }
    }
}

注:これは、if条件の背後にあるロジックやメソッドから戻るタイミングをカバーしません。そのため、drawAllEnemiesおよびrequestAnimFrameメソッドとgame値が更新されます

52
Arun P Johny

Game == 1になったらrequestAnimFrameの呼び出しを停止する必要があります。breakステートメントは、従来のループ(例:while())のみを終了します。

_function loop() {
    if (isPlaying) {
        jet1.draw();
        drawAllEnemies();
        if (game != 1) {
            requestAnimFrame(loop);
        }
    }
}
_

または、2番目のif条件をスキップして、最初の条件をif (isPlaying && game !== 1)に変更することもできます。 gameという変数を作成し、値を0にする必要があります。すべてのゲームに1を追加します。

5
Bart

私はおそらくあなたに刺激を与える関数next()を持っています。

function queue(target) {
        var array = Array.prototype;

        var queueing = [];

        target.queue = queue;
        target.queued = queued;

        return target;

        function queued(action) {
            return function () {
                var self = this;
                var args = arguments;

                queue(function (next) {
                    action.apply(self, array.concat.apply(next, args));
                });
            };
        }

        function queue(action) {
            if (!action) {
                return;
            }

            queueing.Push(action);

            if (queueing.length === 1) {
                next();
            }
        }

        function next() {
            queueing[0](function (err) {
                if (err) {
                    throw err;
                }

                queueing = queueing.slice(1);

                if (queueing.length) {
                    next();
                }
            });
        }
    }
0
felix metge