已解决问题,欢迎对最佳做法发表任何意见

我正在开发JS(和JQuery)战舰游戏,并且具有“ dropBoat”功能,该功能允许用户将飞船放置在板上。该函数的细节并不重要(它需要使用board和boatLength作为参数),但是我无法重用它来放置第二条船。

我正在尝试实现以下一系列事件:

调用dropBoat函数->调用dropBoat函数->调用dropBoat函数->调用StartPlay函数。这是我目前尝试的草图。

var dropBoat = function(board, length, callback){
    //function code here
    $(document).keydown(function(e){
        if(e.which == "38"){
            //more function code here
            callback()
        }
    }
}

var dropThirdBoat = dropBoat(board1, 3, startPlay);
var dropSecondBoat = dropBoat(board1, 2, dropThirdBoat);
var dropFirstBoat = dropBoat(board1, 3, dropSecondBoat)();


这似乎有效

var dropThirdBoat = function(){
    dropBoat(board1, 3, startPlay);
}
var dropSecondBoat = function(){
    dropBoat(board1, 2, dropThirdBoat);
}
var dropFirstBoat = dropBoat(board1, 3, dropSecondBoat);
    var dropBoat = function(board, length, callback){
    //function code here
    $(document).keydown(function(e){
        if(e.which == "38"){
            //more function code here
            callback();
        }
    }
}

最佳答案

您不想多次绑定事件处理程序。将keydown处理程序移出功能代码并移至顶层。

$(document).keydown(function (e) {
    if (e.which == "38"){
        //more function code here
        callback();
    }
}


话虽这么说,简单地使用循环呢?

var dropBoat = function(board, length){
    //function code here
}

var board1 = new BattleshipBoard(),
    board2 = new BattleshipBoard(),
    boats = [1, 1, 1, 2, 2, 3, 5],
    b;

for (b = 0; b < boats.length; b++) {
    dropBoat(board1, boats[b]);
    dropBoat(board2, boats[b]);
}

关于javascript - 自引用回调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29554151/

10-10 05:14